关于thinkphp5.1(tp5.1)中sum计算结果不精确、不准确的问题


使用sprintf函数处理,虽然原理没搞懂,但是问题解决了
复现:

test表中有两列,值分别是-0.33和10,数据类型是float

SELECT SUM(`val`) AS tp_sum FROM `test`

在MySQL中计算结果为9.67


$this->sum('val')

在TP框架下使用sum方法计算得:9.669999986886978

很显然,这是不对的,我一开始使用array_sum()函数发现不行,后面又foreache float也不行,最终查到需要sprintf函数优化一下,完整代码如下:

 sprintf('%.2f', $this->sum('val'))

即可得到正确结果:9.67