Найти числовое значение символа цифры в C#

в символах Юникода есть несколько диапазонов, которые представляют цифры, для которых char.IsDigit возвращает true. Например:

bool b1 = char.IsDigit('uFF12');    // full-width '2' -> true
bool b2 = char.IsDigit('u0665');    // true
bool b3 = char.IsDigit('5');         // true

Я ищу способ получить числовой эквивалент таких символов. Обратите внимание, что int.Parse(...) не работает, поскольку он ожидает, что входные символы будут находиться в базовом диапазоне unicode ('0'.. '9').

это эквивалентно Java Character.digit(...) поведение.

начиная с .NET framework char.IsDigit метод правильно определяет такие символы как цифры, я ожидаю, что он также будет иметь эту функциональность, но я ничего не смог найти.

1 ответов


вы пробовали Char.GetNumericValue? (Я просто загружаю свой ноутбук Windows, чтобы проверить :)

EDIT: просто попробовал - похоже, это работает:

Console.WriteLine(char.GetNumericValue('\uFF12'));  // 2
Console.WriteLine(char.GetNumericValue('\u0665'));  // 5
Console.WriteLine(char.GetNumericValue('5'));       // 5

обратите внимание, что это не просто цифры - это все цифры. Однако,IsDigit is только для цифр. Например:

// U+00BD is the Unicode "vulgar fraction one half" character
Console.WriteLine(char.IsDigit('\u00bd'));         // False
Console.WriteLine(char.GetNumericValue('\u00bd')); // 0.5