You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP简单加法运算相等判断返回错误原因求解

问题原因

这是二进制浮点数精度丢失导致的通用问题,所有遵循IEEE 754浮点数标准的编程语言(包括PHP、Java、Python等)都存在该现象。

十进制小数转换为二进制浮点数时,大部分非整数都无法被精确存储,只会保存一个和真实值无限接近的近似值。10.81本身就属于无法被二进制精确表示的小数,7.00虽然可以精确表示,但二者相加后的结果仍然是近似值,和直接书写的17.81对应的近似存储值存在极微小的误差,用==做严格相等判断时就会返回false。

修复方案

  • 方案1:使用PHP内置的BC高精度数学函数做运算和比较,入参统一传入字符串避免前置精度损失:
// bcadd指定保留2位小数计算和,bccomp比较两个数的大小,相等返回0
echo bccomp(bcadd('10.81', '7.00', 2), '17.81', 2) === 0 ? 'right' : 'wrong';
  • 方案2:设置业务可接受的极小误差阈值,判断两个数的差值是否在阈值范围内:
// 阈值可根据业务精度要求调整,1e-6代表允许误差不超过0.000001
$allowError = 1e-6;
echo abs((10.81 + 7.00) - 17.81) < $allowError ? 'right' : 'wrong';

内容的提问来源于stack exchange,提问作者Vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:45:03