PHP浮点数计算的精度问题

4
$fooValue = 100.68;
$cowValue = 100.67;

$diffValue = $fooValue - $cowValue;
if($diffValue <= 0.01) {
    echo("success");
} else {
    echo("error");
}

这将显示“错误”。

我知道如何在Java中处理,但我不擅长PHP,特别是涉及计算的部分。

请帮助我解决问题。我的意思是如何成功实现这个?


如果您没有把握$fooValue一定是最大值,请记得使用abs()函数。然而,您的问题似乎在于epsilon取值过小,导致浮点数表示不正确,从而得到了错误的结果。 - jensgram
3
由于浮点数的表示方法,$diffValue 等于 0.010000000000005,这不仅是 PHP 特有的。 - poke
1个回答

6

浮点数是一种不精确的数据类型(所有浮点数据类型都是如此),因为在转换为二进制和从二进制中转换时,可能会丢失精度。因此,在需要高(精确)精度时,不应使用浮点算术。

在PHP中,请查看BC MathGMP库。后者仅适用于整数,但具有高性能,并且有时可以在不失去精度的情况下进行整数转换。


如果你得到了答案,请接受并给他一张赞,而不是只说谢谢。 - svk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接