在 PHP 中处理浮点比较
由于浮点运算的限制,PHP 中的浮点比较可能会导致意外结果。
问题实例
考虑以下代码片段:
$a = 0.17; $b = 1 - 0.83; // 0.17 if ($a == $b) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
在此代码中,$a 和 $b 表示相同的数值 (0.17),但使用 == 进行比较会返回else 的结果
解决方案
由于浮点不精确,使用严格比较 (==) 比较浮点数是否相等并不可靠。要解决此问题,请考虑使用可接受的差异阈值进行比较。例如:
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; }
在此代码中,函数abs() 获取$a 和$b 之间的绝对差,然后将结果除以$b。比较是针对一个小阈值进行的,以考虑浮点不精确性。
警告
虽然这种方法为浮点数的相等比较提供了合理的解决方案,但它是重要的是要记住,浮点值本质上是不精确的,并且可能并不总是准确地表示完全相等。
以上是为什么直接浮点比较在 PHP 中不起作用,我们如何可靠地比较它们?的详细内容。更多信息请关注PHP中文网其他相关文章!