2011-08-25 8 views
0

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?

+0

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 –

Répondre

3

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.

+0

Maintenant, je comprends. 2^52 = 4.50359963 × 10^15 et mon numéro est 3.x * 10^16. Merci pour l'explication. – aphex

2

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.

1

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.

Questions connexes