开门见山
今天在开发过程中遇到了一个巨坑的问题,小数点精度问题。
原因:这个坑是由Excel使用函数计算,数据库的小数精度不同导致的。
背景:我这里模拟了一个背景,可能有点不恰当。假设现在有一个Excel,Excel中有学生学号、姓名、语数外成绩,以及通过Avg函数计算的平均分,在保存到数据库表1之后,我们有一段代码逻辑会把学生的平均分字段从表1冗余保存到表2中。
原因一:假设我们有这样一个Excel表格,平均分在计算的时候,四舍五入保留了三位小数。

在表格显示中保留了三位小数,但是实际上是一个无限循环小数,只不过Excel有最大有效数字的限制。
原因二:数据库表1的保留小数位数比冗余表2中的保存位数大。
在表1中,平均数保留三位小数

在表2中,平均数保留了两位小数

这下问题就来了,假设有一个平均数为98.694564545,如果我们在表1(保留三位小数)中保存后,会保存的值为98.695,但是将表1中的值冗余保存到表2(保留两位小数)中时,平均值变为98.70,但是最终值应该为98.69。
精度就以这种方式丢失了。
解决方法
方法1:可以先从根源解决,比如在excel中使用round函数,直接保存两位小数,然后再保存到数据库。

方法2:数据库中的保留位数保持一致,在做数据展示的时候再进行round。
写在最后
今天就分享这么多
在日常开发中,你有哪些踩坑是自己没想到的呢?欢迎在评论区留言。
如果觉得这篇文章对你有帮助的话,欢迎点赞、转发给你周围的朋友。
我是kele,我们下期再见~
夜雨聆风