猿问

PHP-浮动数字精度

PHP-浮动数字精度

$a = '35';$b = '-34.99';echo ($a + $b);

0.009999999999998年度结果

这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。

为什么PHP不返回预期的0.01?


鸿蒙传说
浏览 656回答 3
3回答

慕桂英546537

因为浮点算法!=实数算法。对于一些浮标来说,由于精度不高而造成的差异的一个例子是a和b, (a+b)-b != a..这适用于任何使用浮动的语言。自浮点是有限精度的二进制数,有一个有限的数量可表示数,这导致了精度问题还有这样的惊喜。下面是另一篇有趣的文章:关于浮点算法,每个计算机科学家都应该知道些什么?.回到您的问题,基本上没有办法准确地用二进制表示34.99或0.01(就像十进制,1/3=0.3333.),所以使用近似。为了解决这个问题,你可以:使用round($result, 2)在结果的四舍五入到小数点2位。使用整数。如果这是货币,比如说美元,那么储存35.00美元作为3500美元,34.99美元作为3499美元,然后除以100。很遗憾PHP没有十进制数据类型其他 语言做。
随时随地看视频慕课网APP
我要回答