关于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存储

posted @ 2022-05-06 22:25  小枫同学  阅读(707)  评论(0编辑  收藏  举报