php round函数bug

算增长率的时候,用round来截取小数点后两位
但是后来去数据库看数据的时候,大部分数据都可以,但是有一部分出现错误

调试后发现
-8.04554643785644
round后变成
-8.04000000000001

这个bug出现几率还挺高
在另一个脚本中测试,同样的数据正常截取

阅读 5.9k
3 个回答

不算bug吧,凡是涉及到浮点数问题肯定有精度误差的,用的时候注意一下就行了

新手上路,请多包涵

方法一
直接将php.ini中precision改回14或12(windows中有的是12,各个版本可能不一样,手册中给的默认值是14)

方法二
如果没有权限修改php.ini或者只是要单独设置几个文件的话,可以在文件顶部加入:
ini_set('precision', 14);

方法三
上面方法一和方法二如果可以,当然是最省心省事的了。如果不行,则可以修改项目中的round方法,替换为sprintf方法:
$number = 3.43234325253;
echo sprintf('%.2f', $number);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题