关于mysql的数值相减,计算数值不准确的总结。
今天在做一个需求,在将数据库的数据做减法然后比对的时候发现,12.13-12=0.13 然后和最终的值0.13进行对比的时候居然不相等。这不是坑人吗
然后我们查看了表当中的这些数值存储的数据类型。发现所有的数据存储都是按照varchar的形式进行存储,导致mysql数据库在计算数据的减法的时候出现了
偏差导致的。这就是mysql的不严谨的地方,对于数据的数据类型没有严格的限制。
最终的解决方式:将数据类型进行转化,然后进行计算:
类似下面这种将数据的数据类型进行强制数据类型转化,然后进行计算,这样就能保证数据的精度不会出现问题,计算的结果也不会出现问题。
cast(b.balance as decimal(11,2))
至此问题得到解决。