可能重复:
php calculate float
The accuracy of PHP float calculate
为什么PHP为此计算-2.27373675443E-13 ...
echo (89.99*12) - 1079.88;
不应该返回0?
答案 0 :(得分:4)
floating point计算很复杂且可能不准确。这个问题出现在每种编程语言中,因为十进制数字不能完美地存储在二进制表示中。
引用PHPs documentation about this:
警告
浮点精度浮点数的精度有限。虽然这取决于 在系统中,PHP通常使用IEEE 754双精度格式, 由于订单的舍入,这将产生最大的相对误差 1.11e-16。非基本算术运算可能会更大 错误,当然,必须考虑错误传播 几个操作复杂化。
此外,有理数的数字可以完全表示为 基数10中的浮点数,如0.1或0.7,没有 精确表示为基数2中的浮点数,即 内部使用,无论尾数的大小。因此,他们 没有a就无法转换成它们的内部二进制对应物 精度损失小。这可能导致令人困惑的结果:for 例如,floor((0.1 + 0.7)* 10)通常会返回7而不是 预期8,因为内部表示将是类似的 7.9999999999999991118 ....
所以永远不要将浮动数字结果信任到最后一位数,而不是 直接比较浮点数是否相等。如果更高 精度是必要的,任意精度数学函数和gmp 功能可用。