Perl по модулю операторский вопрос - PullRequest
6 голосов
/ 26 июля 2010

Почему в первом примере выводится неверный результат?

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

Ответы [ 2 ]

9 голосов
/ 26 июля 2010

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

print $x = int(100*1.15);

Дает вам 114.

5 голосов
/ 26 июля 2010

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

...