在C#中查找数字字符的数值

Ira*_*chi 6 c# parsing numbers char

Unicode字符中有多个范围表示数字,为其char.IsDigit返回true.例如:

bool b1 = char.IsDigit('\uFF12');    // full-width '2' -> true
bool b2 = char.IsDigit('\u0665');    // true
bool b3 = char.IsDigit('5');         // true
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来获得这些字符的数字等价物.请注意,int.Parse(...)它不起作用,因为它期望输入字符在基本unicode范围内('0'..'9').

这相当于Java的Character.digit(...)行为.

由于.NET框架的char.IsDigit方法正确地将这些字符标识为数字,我希望它也具有此功能,但我找不到任何东西.

Jon*_*eet 7

你试过Char.GetNumericValue吗?(我只是启动我的Windows笔记本电脑来检查:)

编辑:刚尝试过 - 看起来像是有效的:

Console.WriteLine(char.GetNumericValue('\uFF12'));  // 2
Console.WriteLine(char.GetNumericValue('\u0665'));  // 5
Console.WriteLine(char.GetNumericValue('5'));       // 5
Run Code Online (Sandbox Code Playgroud)

请注意,这只是包括数字-这是任何数字字符.然而,IsDigit 就是只是个数字.例如:

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

  • 甚至Jon Skeet的笔记本电脑也能更快启动;) (2认同)