为了账号安全,请及时绑定邮箱和手机立即绑定

PHP-浮动数字精度

PHP-浮动数字精度

PHP
鸿蒙传说 2019-06-24 16:54:25
PHP-浮动数字精度$a = '35';$b = '-34.99';echo ($a + $b);0.009999999999998年度结果这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。为什么PHP不返回预期的0.01?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

因为浮点算法!=实数算法。对于一些浮标来说,由于精度不高而造成的差异的一个例子是ab(a+b)-b != a..这适用于任何使用浮动的语言。

浮点是有限精度的二进制数,有一个有限的数量可表示数,这导致了精度问题还有这样的惊喜。下面是另一篇有趣的文章:关于浮点算法,每个计算机科学家都应该知道些什么?.


回到您的问题,基本上没有办法准确地用二进制表示34.99或0.01(就像十进制,1/3=0.3333.),所以使用近似。为了解决这个问题,你可以:

  1. 使用round($result, 2)在结果的四舍五入到小数点2位。

  2. 使用整数。如果这是货币,比如说美元,那么储存35.00美元作为3500美元,34.99美元作为3499美元,然后除以100。

很遗憾PHP没有十进制数据类型其他 语言做。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信