Après avoir collé le numéro t=3.7333333258105216E16
dans jsconsole.com ou dans Web Inspector, j'obtiens 37333333258105220
.Convertir un grand nombre en javascript
parseFloat(3.7333333258105216E16)
donne le même résultat.
Quelle est la raison?
Après avoir collé le numéro t=3.7333333258105216E16
dans jsconsole.com ou dans Web Inspector, j'obtiens 37333333258105220
.Convertir un grand nombre en javascript
parseFloat(3.7333333258105216E16)
donne le même résultat.
Quelle est la raison?
JavaScript représente les nombres flottants. Ce format de stockage est composé de 64 bits. Un bit est pour le signe, 11 bits sont pour la puissance de 10 pour multiplier le nombre par, et 52 bits sont pour le nombre. En raison de ce qui précède, les nombres peuvent être acurate au 1/2^52
ou 1/4,503,599,627,370,496
. Ainsi, les nombres sont précis à l'intérieur de cette fraction. Consultez this wikipedia page pour plus d'informations sur les nombres à virgule flottante.
J'ai testé cela en essayant d'en ajouter un à 4,503,599,627,370,495
. Il arrive à 4,503,599,627,370,496
, mais ne le dépasse pas. Here's le violon pour les tests.
Maintenant, je comprends. 2^52 = 4.50359963 × 10^15 et mon numéro est 3.x * 10^16. Merci pour l'explication. – aphex
Vous rencontrez un arrondi à virgule flottante. Les nombres JavaScript sont implémentés en tant que flottants 64 bits double précision selon la norme IEEE 754.
Vous ne pouvez pas toujours représenter avec précision un nombre décimal à virgule flottante en binaire. Il perd de la précision à la fin du nombre, donc il peut contenir 64 bits.
Voir cette question pour la vraie réponse sur le nombre: [http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value- un numéro peut-aller à] [1] [1]: http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest -integer-value-a-number-can-go-to –