2010-07-26 14 views
6

Pourquoi le premier exemple imprime-t-il un mauvais résultat?Perl opérateur modulo question

perl -le 'print $x = 100*1.15 % 5' 
4 
perl -le 'print $x = 1000*1.15 % 5' 
0 
+1

Cela se produit également en PHP. Python dit que c'est 5.0 (yep,% 5 = 5.0) – NullUserException

+0

@NullUserException: tnanks. python shell est bon pour tester les résultats des nombres flottants arithmétique :-) –

+0

Donc, c'est ruby. Ruby me dit que c'est 4.999999 – NullUserException

Répondre

9

C'est à cause de l'arithmétique en virgule flottante.

print $x = int(100*1.15); 

Vous donne 114.

5

Arrondi. Gardez à l'esprit que les ordinateurs ne peuvent pas représenter parfaitement les décimales réelles - ils sont approximatifs. Sur mon ordinateur, perl -le 'print $x = (100*1.15)-115' donne le résultat -1.4210854715202e-14, ce qui signifie que 100*1.15 est presque, mais pas tout à fait, 115.