首页 > 后端开发 > php教程 > 为什么直接浮点比较在 PHP 中不起作用,我们如何可靠地比较它们?

为什么直接浮点比较在 PHP 中不起作用,我们如何可靠地比较它们?

DDD
发布: 2025-01-03 14:27:40
原创
955 人浏览过

Why Doesn't Direct Float Comparison Work in PHP, and How Can We Compare Them Reliably?

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

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