2010-07-26 10 views
6

Dlaczego pierwszy przykład wyświetla niewłaściwy wynik?Pytanie operatora modulo Perl

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

To samo dzieje się w PHP. Python mówi, że to 5.0 (yep,% 5 = 5.0) – NullUserException

+0

@NullUserException: tnanks. Python jest dobry do testowania wyników arytmetyki liczb zmiennoprzecinkowych :-) –

+0

So's ruby. Ruby mówi mi, że to 4.999999 – NullUserException

Odpowiedz

9

Dzieje się tak z powodu arytmetyki zmiennoprzecinkowej.

print $x = int(100*1.15); 

Daje 114.

5

zaokrąglenia. Należy pamiętać, że komputery nie mogą przedstawiać rzeczywistych miejsc dziesiętnych doskonale - są przybliżone. Na moim komputerze perl -le 'print $x = (100*1.15)-115' daje wynik -1.4210854715202e-14, co oznacza, że ​​100*1.15 jest prawie, ale nie całkiem, 115.