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

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

Susan Sarandon
发布: 2024-12-17 12:18:25
原创
482 人浏览过

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can I Fix Them?

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

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