2010-07-26 12 views
6

Почему первый пример печатает неверный результат?Perl modulo question question

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

Это также происходит на PHP. Python говорит, что это 5.0 (yep,% 5 = 5.0) – NullUserException

+0

@NullUserException: tnanks. python shell хорош для тестирования результатов арифметики чисел с плавающей запятой :-) –

+0

Итак, рубин. Ruby говорит мне, что это 4.999999 – NullUserException

ответ

9

Это из-за арифметики с плавающей запятой.

print $x = int(100*1.15); 

Дает 114.

5

Округление. Имейте в виду, что компьютеры не могут представлять фактические десятичные значки совершенно - они приблизительны. На моем компьютере perl -le 'print $x = (100*1.15)-115' дает результат -1.4210854715202e-14, а это значит, что 100*1.15 почти, но не совсем, 115.