Как преобразовать арабский номер в 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();
}
теперь вы можете просто вызвать функцию, чтобы вернуть западные арабские цифры.