Quelle est la différence entre Char.IsDigit()
et Char.IsNumber()
en C #?
146
Char.IsDigit()
est un sous-ensemble de Char.IsNumber()
.
Certains des caractères qui sont «numériques» mais pas des chiffres incluent 0x00b2 et 0x00b3 qui sont en exposant 2 et 3 («²» et «³») et les glyphes qui sont des fractions telles que «¼», «½» et «¾ ».
Notez qu'il y a pas mal de caractères IsDigit()
retournés true
pour qui ne sont pas dans la plage ASCII de 0x30 à 0x39, tels que ces caractères numériques thaïlandais: '๐' '๑' '๒' '๓' '๔' '๕' '๖ '' ๗ '' ๘ '' ๙ '.
Cet extrait de code vous indique quels points de code diffèrent:
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()
au lieu deChar.IsNumeric
la première ligne?character >= '0' && character <= '9'
.J'ai trouvé la réponse:
Conclusion
Char.IsDigit
:Les chiffres valides sont des membres de la
DecimalDigitNumber
catégorie uniquement.Char.IsNumber
: Lesnuméros valides sont membres du
DecimalDigitNumber
,LetterNumber
ouOtherNumber
catégorie.la source
IsNumber(x)
reviendra parfoistrue
pour des résultats que la personne moyenne ne considérerait pas comme un nombre et voici pourquoi.C # regroupe les caractères dans
UnicodeCategory
lesquels les nombres n'appartiennent pas à une seule mais à 3 catégories différentes:Tout ce qui tombe à un au- dessus retournera
true
pourIsNumber()
. CarIsDigit()
ce sera seulementUnicodeCategory.DecimalDigitNumber
.J'ai écrit ce morceau de code pour indiquer lequel est lequel: (La table n'est pas pleine en raison de la taille autorisée de la publication, mais vous devriez pouvoir la générer et ce n'est de toute façon qu'à des fins d'exemple)
Le résultat ressemble à ceci: Comme vous pouvez le voir, il y a des choses que l'on ne s'attendrait pas à être «nombre».
la source