Как преобразовать арабский номер в int?

Я работаю над проектом на С#, который требует использования арабских чисел, но тогда он должен хранить как целое в базе данных, мне нужно решение для преобразования арабских чисел в int в С#. Любое решение или помощь, пожалуйста? заранее спасибо


Из комментариев:

У меня есть арабские числа, такие как 1,2,3,4... и необходимо преобразовать в 1,2,3 или 234 конвертировать в 234

Ответы

Ответ 1

Арабские цифры, такие как 1,2,3,4 в юникоде, кодируются как символы в диапазоне от 1632 до 1641. Вычтите unicode для арабского нуля (1632) из ​​значения unicode каждого символа арабской цифры, чтобы получить свои цифровые значения. Умножьте каждое цифровое значение с его значением места и суммируйте результаты, чтобы получить целое число.

В качестве альтернативы используйте Regex.Replace для преобразования строки с арабскими цифрами в строку с десятичными цифрами, а затем используйте Int.Parse для преобразования результата в целое число.

Ответ 2

Простой способ преобразования арабских чисел в целое число

    string EnglishNumbers="";
    for (int i = 0; i < arabicnumbers.Length; i++)
    {
        EnglishNumbers += char.GetNumericValue(arabicnumbers, i);
    }
    int convertednumber=Convert.ToInt32(EnglishNumbers);

Ответ 3

используйте этот метод

private string toEnglishNumber(string input)
        {
            string EnglishNumbers = "";


            for (int i = 0; i < input.Length; i++)
            {
                if (Char.IsDigit(input[i]))
                {
                    EnglishNumbers += char.GetNumericValue(input, i);

                }
                else
                {
                    EnglishNumbers += input[i].ToString();
                }


            }
            return EnglishNumbers;

        }

Ответ 4

К сожалению, пока еще невозможно проанализировать полное строковое представление, передав соответствующий IFormatProvider (возможно, в будущих версиях). Однако тип char имеет метод GetNumericValue, который преобразует любой числовой символ Unicode в double. Например:

double two = char.GetNumericValue('٢');
Console.WriteLine(two); // prints 2

Вы можете использовать его для преобразования одной цифры за раз.

Ответ 5

чтобы получить значение цифры, вычтите из него нулевой символ, например, в нормальном цифровом, '1'-'0' = 1, '2'-'0' = 2. и др.

Для многозначного числа вы можете использовать что-то вроде этого

 result =0;
 foreach(char digit in number)
 {
     result *= 10; //shift the digit, multiply by ten for each shift
     result += (digit - '0)'; //add the int value of the current digit.
 }

просто замените "0" на арабский нуль, если ваш номер использует арабский символ. Это работает для любых числовых символов, если 0-9 в этой системе символов закодированы последовательно.

Ответ 6

Я знаю, что этот вопрос немного устарел, однако я столкнулся с подобным делом в одном из моих проектов и принял этот вопрос и решил поделиться своим решением, которое отлично работало для меня, и надеюсь, что оно будет служить другим тем же.

private string ConvertToWesternArbicNumerals(string input)
{
    var result = new StringBuilder(input.Length);

    foreach (char c in input.ToCharArray())
    {
        //Check if the characters is recognized as UNICODE numeric value if yes
        if (char.IsNumber(c))
        {
            // using char.GetNumericValue() convert numeric Unicode to a double-precision 
            // floating point number (returns the numeric value of the passed char)
            // apend to final string holder
            result.Append(char.GetNumericValue(c));
        }
        else
        {
            // apend non numeric chars to recreate the orignal string with the converted numbers
            result.Append(c);
        }
    }

    return result.ToString();
}

теперь вы можете просто вызвать функцию, чтобы вернуть западные арабские цифры.