Apa perbedaan antara Char.IsDigit()
dan Char.IsNumber()
di C #?
146
Char.IsDigit()
adalah bagian dari Char.IsNumber()
.
Beberapa karakter yang 'numerik' tetapi bukan digit termasuk 0x00b2 dan 0x00b3 yang ditulis superskrip 2 dan 3 ('²' dan '³') dan mesin terbang yang merupakan pecahan seperti '¼', '½', dan '¾ '
Perhatikan bahwa ada beberapa karakter yang IsDigit()
mengembalikan true
untuk yang tidak berada dalam kisaran ASCII dari 0x30 hingga 0x39, seperti karakter digit Thailand ini: '๐' '๑' '๒' '๒' '๓' '๔' '๕' '๖ '' ๗ '' ๘ '' ๙ '.
Cuplikan kode ini memberi tahu Anda titik kode mana yang berbeda:
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()
alih-alihChar.IsNumeric
di baris pertama?character >= '0' && character <= '9'
.Saya menemukan jawabannya:
Kesimpulan
Char.IsDigit
:Digit yang valid adalah anggota
DecimalDigitNumber
kategori tersebut.Char.IsNumber
:Nomor valid adalah anggota
DecimalDigitNumber
,LetterNumber
atauOtherNumber
kategori.sumber
IsNumber(x)
terkadang akan kembalitrue
untuk hasil yang rata-rata orang tidak akan anggap sebagai angka dan inilah sebabnya.C # mengelompokkan karakter-karakter ke dalam
UnicodeCategory
mana angka tidak termasuk dalam satu tetapi 3 kategori berbeda:Apa pun yang jatuh ke satu di atas akan kembali
true
untukIsNumber()
. Karena hanyaIsDigit()
itu yang akan terjadiUnicodeCategory.DecimalDigitNumber
.Saya menulis sedikit kode ini untuk menunjukkan yang mana: (Tabel tidak penuh karena ukuran posting diperbolehkan, tetapi Anda harus dapat menghasilkannya dan itu hanya untuk tujuan contoh saja)
Hasilnya terlihat sebagai berikut: Seperti yang Anda lihat ada hal-hal yang orang tidak harapkan menjadi 'angka'.
sumber