使用负数计算PHP会产生错误的值

时间:2014-04-03 10:09:28

标签: php numbers

我的PHP代码:

echo -100.35+100.00;
echo '<br/>';
echo -478.35+478.32+0.03;

提供输出:

-0.34999999999999
-2.9559688030645E-14

我不明白为什么,我尝试(浮动)在值的前面,但没有区别。

3 个答案:

答案 0 :(得分:2)

您应该使用 BC Math Functions 进行此类计算。

答案 1 :(得分:2)

看看this manual,它解释了内部表示对于浮点数不是100%精确...它与我怀疑的浮点数的内部表示有关。

本手册还提到了these methodsthese的精确度计算。

答案 2 :(得分:1)

这就是浮动的工作方式。在PHP中,有整数,或者有浮点数 - 没有精确的小数等。

花车根本就不完全 - 你不能做太多关于它的事情。 http://www.php.net/manual/en/language.types.float.php

请注意大警告:

  

浮点数的精度有限。虽然它取决于系统,但PHP通常使用IEEE 754双精度格式,由于舍入的顺序为1.11e-16,因此会产生最大的相对误差。非基本算术运算可能会产生更大的误差,当然,当复合多个运算时,必须考虑误差传播。

     

此外,基本10中的浮点数精确表示的有理数,如0.1或0.7,没有精确表示为基数2中的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物。这可能会导致令人困惑的结果:例如,floor((0.1 + 0.7)* 10)通常会返回7而不是预期的8,因为内部表示将类似于7.9999999999999991118 ....