Mysql的float类型造成的困扰总结

时间:2021-08-20 17:43:03

因为换了工作正在学习使用MySQL,今天领导提出了一个问题,如下:

Mysql的float类型造成的困扰总结

X列是累加值,A列是每日新增值,那么X2应该是X1+A2,而且存储过程里也是这样计算的。可是奇怪的是X2的值却总是和正确值(2396116766)有一定的差异。于是我手工进行了update,但是没有办法,数据永远是:2396116736。在我百思不得其解的时候我决定看看这个表怎么建立的,我发现这个字段是float(20,4),参阅《MySQL技术内幕:SQL编程》和《高性能MySql》发现,float字段是不精确的。于是把这个字段改成了decimal,这样就正确了。

我参阅了很多网上的资料,很多资料都有过实验,有些人说超过10位就会出现这个问题,我测试了一下,123456789这种数据,都会有问题。

MySql支持的字段类型自然非常丰富,给人提供了很多选择,但是对比oracle的number字段(虽然看着很傻瓜,什么数字都是number型),给我这种刚开始接触MySql的人造成了很多困扰,不过有了困扰解决了就是经验,写下来也能帮助到和我一样有问题的人,可谓功德无量。