perl - int()递减整数

use*_*393 2 floating-point int perl integer-arithmetic

在我受到抨击之前,我想说我确实理解浮点数和类似的东西,但这似乎不是我的问题.

为简化起见,我试图确定一个数字是否超过2位小数.我这样做是通过将数字乘以100(存储在变量" test1"下)然后截断它int() ($test2)并将其与a进行比较if.

$test1 = $number * 100;
$test2 = int($test1);
unless ($test1 == $test2) {
  die ("test1:$test1, test2:$test2");
}
Run Code Online (Sandbox Code Playgroud)

最初$number来自一系列其他函数,实际上应该只有两位小数,因此我试图捕捉那些不是(因为一些条目似乎有很多小数).

但是,我得到了:

test1:15, test2:14
Run Code Online (Sandbox Code Playgroud)

从我的die().

有人能解释一下会发生什么吗?怎么能int(15)14

Dav*_*vid 5

来自perldoc:

浮点数的机器表示有时会产生违反直觉的结果.例如,int(-6.725/0.025)产生-268而不是正确的-269; 那是因为它更像是-268.99999999999994315658

因此,机器表示"15"可能类似于14.9999999999999999,因此int将其截断为14.

请注意,perldoc建议使用POSIX函数floorceil代替.