关于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获取新代码,记得附上文章链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人