Was ist der Unterschied zwischen Char.IsDigit()
und Char.IsNumber()
in C #?
146
Char.IsDigit()
ist eine Teilmenge von Char.IsNumber()
.
Einige der Zeichen, die 'numerisch', aber keine Ziffern sind, umfassen 0x00b2 und 0x00b3, die mit 2 und 3 ('²' und '³') hochgestellt sind, und die Glyphen, die Brüche wie '¼', '½' und '¾ sind '.
Beachten Sie, dass es durchaus ein paar Zeichen , dass IsDigit()
Renditen true
für die nicht im ASCII - Bereich von 0x30 bis 0x39, wie diese Thai Ziffer Zeichen: ‚0‘ ‚1‘ ‚2‘ ‚3‘ ‚4‘ ‚5‘ ‚6 '' ๗ '' ๘ '' ๙ '.
Dieser Codeausschnitt zeigt Ihnen, welche Codepunkte sich unterscheiden:
static private void test()
{
for (int i = 0; i <= 0xffff; ++i)
{
char c = (char) i;
if (Char.IsDigit( c) != Char.IsNumber( c)) {
Console.WriteLine( "Char value {0:x} IsDigit() = {1}, IsNumber() = {2}", i, Char.IsDigit( c), Char.IsNumber( c));
}
}
}
0123456789
?Char.IsNumber()
stattChar.IsNumeric
in der ersten Zeile?character >= '0' && character <= '9'
.Ich fand die Antwort:
Fazit
Char.IsDigit
:Gültige Ziffern sind nur Mitglieder der
DecimalDigitNumber
Kategorie.Char.IsNumber
:Gültige Zahlen sind Mitglieder der
DecimalDigitNumber
,LetterNumber
oderOtherNumber
Kategorie.quelle
IsNumber(x)
wird manchmaltrue
für Ergebnisse zurückkehren, die eine durchschnittliche Person nicht als Zahl betrachten würde, und hier ist der Grund.C # gruppiert Zeichen, bei
UnicodeCategory
denen Zahlen nicht in eine einzelne, sondern in drei verschiedene Kategorien fallen:Alles, was in eines der oben genannten fällt, wird
true
für zurückkehrenIsNumber()
. DennIsDigit()
es wird nur seinUnicodeCategory.DecimalDigitNumber
.Ich habe dieses Codebit geschrieben, um anzugeben, welches welches ist: (Die Tabelle ist aufgrund der zulässigen Postgröße nicht voll, aber Sie sollten es generieren können und es dient sowieso nur zum Beispiel)
Das Ergebnis sieht folgendermaßen aus: Wie Sie sehen können, gibt es Dinge, von denen man nicht erwarten würde, dass sie 'Nummer' sind.
quelle