比较 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 应该相等,但此代码返回“a 和 b 不相同”。
差异的原因
这种差异源于浮点运算的本质。浮点值表示只能近似真实数值的二进制格式的数字。因此,浮点数运算可能会引入小错误,从而无法进行精确比较。
正确方法
要避免此问题,请在以下情况下使用容差值:比较浮点数。此容差表示两个被视为相等的值之间的最大可接受差异。例如:
if (abs(($a - $b) / $b) < 0.00001) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
在这种情况下,如果 $a 和 $b 之间的绝对差除以 $b 小于 0.00001,则认为这些值相等。根据您的应用所需的精度调整公差值。
以上是为什么 PHP 中的浮点比较有时会失败,如何修复它们?的详细内容。更多信息请关注PHP中文网其他相关文章!