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

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

Susan Sarandon
Susan Sarandon原创
2024-12-17 12:18:25500浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn