$a = ‘35’; $b = ‘-34.99’; echo ($a + $b);
结果为0.009999999999998
这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。
为什么PHP不返回预期的0.01?
因为浮点运算!=实数运算。对于一些浮子a和b,由不精确性引起的差异的说明是(a+b)-b != a。这适用于使用浮点数的任何语言。
a
b
(a+b)-b != a
由于浮点数是具有有限精度的二进制数,因此存在有限数量的可表示数,这会导致精度问题]和类似的意外情况。这是另一篇有趣的读物:每位计算机科学家都应了解的浮点运算法则]。
回到您的问题,基本上没有办法用二进制准确地表示34.99或0.01(就像十进制一样,1/3 = 0.3333 …),因此使用了近似值。要解决此问题,您可以:
使用round($result, 2)的结果是四舍五入到小数点后2位。
round($result, 2)
使用整数。如果那是货币,以美元为单位,则将35.00美元存储为3500,将34.99美元存储为3499,然后将结果除以100。
遗憾的是,PHP没有其他语言那样具有十进制数据类型。