Почему первый пример печатает неправильный результат?
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.