Какая разница между Char.IsDigit()
и Char.IsNumber()
в C #?
146
Char.IsDigit()
является подмножеством Char.IsNumber()
.
Некоторые из символов, которые являются «числовыми», но не цифрами, включают 0x00b2 и 0x00b3, которые обозначены надписями 2 и 3 («²» и «³») и глифы, являющиеся дробными частями, такими как «¼», «½» и «¾». ».
Обратите внимание, что существует довольно много символов, которые IsDigit()
возвращаются true
для этого, не находятся в диапазоне ASCII от 0x30 до 0x39, например, такие символы тайского алфавита: '๐' '๑' '๒' '๓' '๔' '๕' '๖ '' ๗ '' ๘ '' ๙ '.
Этот фрагмент кода говорит вам, какие кодовые точки отличаются:
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()
а неChar.IsNumeric
в первой строке?character >= '0' && character <= '9'
.Я нашел ответ:
Вывод
Char.IsDigit
:Допустимые цифры - только члены
DecimalDigitNumber
категории.Char.IsNumber
:Действительные числа членов
DecimalDigitNumber
,LetterNumber
илиOtherNumber
категории.источник
IsNumber(x)
иногда будет возвращатьсяtrue
к результатам, средний человек не будет считать число, и вот почему.C # группирует символы,
UnicodeCategory
где числа попадают не в одну, а в 3 разные категории:Все , что попадает в одно выше , будет возвращаться
true
кIsNumber()
. ИбоIsDigit()
это будет только такUnicodeCategory.DecimalDigitNumber
.Я написал этот фрагмент кода, чтобы указать, что есть что: (Таблица не заполнена из-за допустимого размера сообщения, но вы должны быть в состоянии сгенерировать его, и в любом случае это только для примера)
Результат выглядит следующим образом: Как вы можете видеть, есть вещи, которые никто не ожидал бы назвать «числом».
источник