首页 > 后端开发 > php教程 > 为什么 PHP 中的浮点比较有时会失败,我们如何正确比较它们?

为什么 PHP 中的浮点比较有时会失败,我们如何正确比较它们?

DDD
发布: 2024-12-23 16:56:11
原创
763 人浏览过

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

比较 PHP 中的浮点数

比较 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板