2012-09-27 20 views
6

Hay varios rangos en caracteres Unicode que representan dígitos, para los cuales char.IsDigit devuelve true. Por ejemplo:Encuentre el valor numérico de un carácter de dígito en C#

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

Estoy buscando una forma de obtener el equivalente numérico de dichos caracteres. Tenga en cuenta que int.Parse(...) NO funciona, ya que espera que los caracteres de entrada estén en el rango Unicode base ('0' .. '9').

Esto es equivalente al comportamiento de Character.digit(...) de Java.

Dado que el método char.IsDigit del .NET Framework identifica correctamente estos caracteres como dígitos, espero que también tenga esta funcionalidad, pero no pude encontrar nada.

Respuesta

7

¿Has probado Char.GetNumericValue? (Sólo estoy arrancar mi ordenador portátil de Windows para comprobar :)

EDIT: Sólo probé - parece que funciona:

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

Tenga en cuenta que este no basta con incluir los dígitos - es cualquier carácter numérico Sin embargo, IsDigites solo para los dígitos. Por ejemplo:

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

Sí, lo intenté también. Funciona, gracias. He comprobado todos los métodos en la clase 'char', es vergonzoso que haya pasado por alto este ... – Iravanchi

+2

Incluso las computadoras portátiles de Jon Skeet arrancan más rápido;) –

Cuestiones relacionadas