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
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
Dzieje się tak z powodu arytmetyki zmiennoprzecinkowej.
print $x = int(100*1.15);
Daje 114.
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.
To samo dzieje się w PHP. Python mówi, że to 5.0 (yep,% 5 = 5.0) – NullUserException
@NullUserException: tnanks. Python jest dobry do testowania wyników arytmetyki liczb zmiennoprzecinkowych :-) –
So's ruby. Ruby mówi mi, że to 4.999999 – NullUserException