Почему первый пример печатает неверный результат?Perl modulo question question
perl -le 'print $x = 100*1.15 % 5'
4
perl -le 'print $x = 1000*1.15 % 5'
0
Почему первый пример печатает неверный результат?Perl modulo question question
perl -le 'print $x = 100*1.15 % 5'
4
perl -le 'print $x = 1000*1.15 % 5'
0
Это из-за арифметики с плавающей запятой.
print $x = int(100*1.15);
Дает 114.
Округление. Имейте в виду, что компьютеры не могут представлять фактические десятичные значки совершенно - они приблизительны. На моем компьютере perl -le 'print $x = (100*1.15)-115'
дает результат -1.4210854715202e-14
, а это значит, что 100*1.15
почти, но не совсем, 115.
Это также происходит на PHP. Python говорит, что это 5.0 (yep,% 5 = 5.0) – NullUserException
@NullUserException: tnanks. python shell хорош для тестирования результатов арифметики чисел с плавающей запятой :-) –
Итак, рубин. Ruby говорит мне, что это 4.999999 – NullUserException