2010-03-10 4 views
2

de Doublons possibles:
Why 81.66 * 15 = 1224.8999999 in Javascript (or Perl) and not 1224.9 ?
Is JavaScript’s math broken?se multiplient en javascript ne peut pas obtenir la réponse correcte

var t1 = 5000; 
var t2 = 0.07; 
alert(t1 * t2); 

est ici un code très simple qui renvoie un résultat incorrect; Je prédis le résultat est 350

mais le résultat est 350.00000000000005

Comment puis-je obtenir le résultat correct?

et quel est le problème dans ce code?

+1

Ceci est une copie de l'une des façons suivantes: http : //stackoverflow.com/questions/2387675/why-81-66-15-1224-8999999-in-javascript-or-perl-and-not-1224-9 http://stackoverflow.com/questions/228 4873/float-inexactitudes-in-python http://stackoverflow.com/questions/2379934/unexpected-result-using-posix-ceil-in-perl http://stackoverflow.com/questions/872544/precision-of- flottant –

+1

En effet ... Un classique bien usé: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – Shog9

+0

[Lire] (http://en.wikipedia.org/wiki/ Point flottant). C'est un doublon d'un million d'autres questions. –

Répondre

3

L'arithmétique des virgules flottantes dans les ordinateurs est une approximation de la valeur.

voir http://en.wikipedia.org/wiki/Floating_point#Problems_with_floating-point

+2

Je ne suis pas d'accord - ce n'est pas plus un problème avec virgule flottante que 1/3 ou π sont pour le système de nombre décimal. Vous ne pouvez pas représenter exactement 0,1 en binaire. – duffymo

+1

@duffmo Les variables à virgule flottante ont un nombre donné de bits pour coder une valeur numérique. Il y a des nombres infiniment innombrables mais seulement un nombre fini de bits. Par conséquent, il y aura toujours des valeurs qui ne peuvent pas être représentées, que vous utilisiez un binaire ou un BCD ou autre, en utilisant le nombre fini de bits disponibles. Maintenant, si vous allez la route de précision arbitraire, vous êtes toujours limité par la mémoire de la machine qui est finie. Maintenant, gardez à l'esprit que '1/3' est la représentation la plus précise de' 1/3'. –

+0

Non, je comprends très bien, merci. Je sais tout sur les nombres à virgule flottante. – duffymo

1

Math.round() vous aidera à :-)

Questions connexes