J'ai un problème ennuyeux en JavaScript.
parseInt(1 / 0, 19)
18
Pourquoi est - parseInt
rendement 18
?
J'ai un problème ennuyeux en JavaScript.
parseInt(1 / 0, 19)
18
Pourquoi est - parseInt
rendement 18
?
Le résultat de l' 1/0
est Infinity
.
parseInt
traite son premier argument est une chaîne de caractères qui signifie tout d'abord Infinity.toString()
est appelé, la production de la chaîne "Infinity"
. De sorte qu'il fonctionne de la même manière que si vous avez demandé à convertir "Infinity"
dans la base de 19 à virgule.
Voici les chiffres de la base de 19 avec leurs valeurs décimales:
Base 19 Base 10 (decimal)
---------------------------
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
Ce qui se passe ensuite est qu' parseInt
analyse l'entrée en "Infinity"
de trouver la partie qui peut être analysé et s'arrête après l'acceptation de la première I
(parce qu' n
n'est pas valide chiffres en base 19).
Par conséquent, il se comporte comme si vous appeliez parseInt("I", 19)
, ce qui le convertit en décimal 18 par le tableau ci-dessus.
Voici la séquence des événements:
1/0
évalue Infinity
parseInt
lectures Infinity
et heureusement notes qu' I
à 18 ans dans la base de 19parseInt
ignore le reste de la chaîne, car il ne peut pas être converti.Notez que vous obtenez un résultat de n'importe quelle base >= 19
, mais pas pour les bases ci-dessous. Pour les bases >= 24
, vous obtiendrez un plus grand résultat, n
devient valide chiffres à ce point.
À ajouter aux réponses ci-dessus:
parseInt est destiné à analyser les chaînes en nombres (l'indice est dans le nom). Dans votre situation, vous ne voulez pas le faire toute l'analyse à tous depuis 1/0 est déjà un certain nombre, donc c'est un choix étrange de la fonction. Si vous avez un nombre (qui vous le faire) et que vous voulez convertir à un particulier de base, vous devez utiliser toString avec un radix à la place.
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
À ajouter aux réponses ci-dessus
parseInt(1/0,19)
est équivalent à parseInt("Infinity",19)
Au sein de la base de 19 nombre 0-9
et A-I
(or a-i)
sont de numéros valides. Donc, à partir de la "Infinity" il faut I
de la base de 19 et les convertit en base 10 qui devient 18
Ensuite, il tente de prendre le prochain caractère, c'est à dire n
ce qui n'est pas présent dans la base de 19 les rejets prochaine caractères (comme par javascript du comportement de la conversion de chaîne de caractères pour le nombre)
Ainsi, si vous écrivez parseInt("Infinity",19)
OU parseInt("I",19)
OU parseInt("i",19)
le résultat sera le même et je.e 18
.
Maintenant, si vous écrivez parseInt("I0",19)
le résultat sera 342
en tant que I X 19 (the base)^1 + 0 X 19^0
= 18 X 19^1 + 0 X 19^0
= 18 X 19 + 0 X 1
= 342
De même, parseInt("I11",19)
entraînera 6518
c'est à dire
18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 361 + 1 X 19 + 1 X 1
= 6498 + 19 + 1
= 6518
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.