比较 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'; } ?>
在此代码中,您可能期望 if 条件为 true,因为 $a 和 $b 表示相同的值。然而,它的计算结果意外地为 false,表明 $a 和 $b 不相等。
造成这种差异的原因在于浮点数的内部表示在计算机中。这些数字是近似值,其精度是有限的。执行浮点计算时,可能会累积小的舍入误差,从而在比较它们是否相等时导致意外结果。
要解决此问题,您应该避免使用严格相等运算符 (==) 除非您绝对确定它们代表相同的值。相反,请使用 abs() 函数,并将两个值之间的绝对差与可接受的小容差进行比较。
例如,您可以使用以下代码以 0.00001 的容差比较 $a 和 $b :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; } else { echo "a and b are not same"; }
此方法提供了一种更可靠的方法来比较实际用途的浮动。
以上是为什么 PHP 中的浮点比较有时会失败,我们如何正确比较它们?的详细内容。更多信息请关注PHP中文网其他相关文章!