关于thinkphp5.1(tp5.1)中sum计算结果不精确、不准确的问题
0x01 问题复现:
test表中有两列,值分别是-0.33和10,数据类型是float
SELECT SUM(`val`) AS tp_sum FROM `test`
在MySQL中计算结果为9.67
$this->sum('val')
在TP框架下使用sum方法计算得:9.669999986886978
0x02 复现结论
很显然,这是不对的,我一开始使用array_sum()函数发现不行,后面又foreache float也不行,最终查到需要sprintf函数优化一下,完整代码如下:
sprintf('%.2f', $this->sum('val'))
即可得到正确结果:9.67
0x03 在数据库中更改
使用定点数DECIMAL
存储
本文来自博客园,作者:小枫同学,除网络转载的部分,其他版权属于作者和博客园所有,未经作者或博客园许可,禁止转载、复制、重新发布完整或者部分文字、代码、图片等信息,否则将保留追究法律责任的权利(如博客侵权了您的作品,本人再次表示抱歉,请将原创地址发送至下文邮箱,核实后立刻删除。)。查阅文章的同学,由于网络爬虫严重,有些代码并不会完整贴出来或者存在bug,不过你可以发送邮件到xfstune@126.com获取新代码,记得附上文章链接