2012-09-27 6 views
6

Es gibt mehrere Bereiche in Unicode-Zeichen, die Ziffern darstellen, für die char.IsDigittrue zurückgibt. Zum Beispiel:Numerischer Wert eines Ziffernzeichens in C finden #

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

Ich bin auf der Suche nach einer Möglichkeit, das numerische Äquivalent solcher Zeichen zu erhalten. Beachten Sie, dass int.Parse(...) NICHT funktioniert, da erwartet wird, dass die Eingabezeichen im Basis-Unicode-Bereich liegen ('0' .. '9').

Dies entspricht Javas Character.digit(...) Verhalten.

Da die char.IsDigit-Methode des .NET-Frameworks solche Zeichen korrekt als Ziffern identifiziert, erwarte ich, dass sie diese Funktionalität ebenfalls besitzt, aber ich konnte nichts finden.

Antwort

7

Haben Sie versucht Char.GetNumericValue? (Ich bin das Booten nur mein Windows-Laptop bis zu überprüfen :)

EDIT: habe gerade versucht es - sieht aus wie es funktioniert:

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

Beachten Sie, dass diese nicht nur Ziffern enthalten - es ist jede numerisches Zeichen. IsDigitist nur für Ziffern. Zum Beispiel:

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

Ja, gerade versucht es auch. Es funktioniert, danke. Ich habe die ganzen Methoden auf der "char" -Klasse überprüft, es ist peinlich, dass ich diese übersehen habe ... – Iravanchi

+2

Sogar Jon Skeets Laptops booten schneller;) –

Verwandte Themen