浮点值比较错误


Float value comparison bug

$x = array(
    "0",
    "1689.60",
    "0.00",
    "-200",
    "432.00",
    "33.60"
);
$v = 0;
foreach($x as $p) {
    $v += $p;
}
if($v == 1955.2) {
    echo 'equal';
}

使用这个简单的脚本,我假设它将输出"相等",但事实并非如此。

如果我将 -200 的值更改为 -100 并将预期结果值更改为 2055.2,它就可以正常工作。我已经通过类型将$v转换为字符串解决了我的问题,但我只是想找出为什么它是数字(整数或浮点数)类型时它不起作用。

http://php.net/manual/en/language.types.float.php

这里的问题是你的浮点值,即使它们看起来非常相等,也不是由于PHP(和计算机本身)如何表示浮点整数。 在源的评论中有一些解决方案来测试浮点数的相等性。 我强烈建议通过该来源;它简短而翔实。