关于mysql中DOUBLE和FLOAT类型的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 12:08:08
看参考手册
有DOUBLE(m,d)和FLOAT(m,d)
m是显示宽度,d是小数位数

从我理解来看
在DOUBLE(5,2)类型的表中输入: 12345678901234567890.1234567890
从我理解来看应该得到: 12345600000000000000.00 或者可能是 99999.99
但为什么得到的值是: 12345678901234567000.00

从我理解来看
在FLOAT(5,2)类型的表中输入: 12345678901234567890.1234567890
从我理解来看应该得到: 12345600000000000000.00 或者可能是 99999.99
但为什么得到的值是: 12345679395506094000.00

这是为什么咧?
可能是我理解错误~
希望各位高手指点
我测试用的mysql版本是4.0.26-nt
还有其他的更高版本在这方面有什么不同咧?

就是因为看了<MySQL 3.23 中文参考手册>一文,所以设置了float(32,5)这样一个字段来测试float

float是用4个([1,24))或者8个([24,53))字节存储数据,

我设置了数据3647483999插入表中 结果得到3647483904.00000 ,修改任何小数部分也得到3647483904.00000 然而修改成3947483904.00000,3997483904.00000 却成功保存

我开始怀疑是不是mysql的float类型的数据的高位字节和低位字节之间的进位有问题啊?
后来发现应该是与科学记数法有关,不管你设置多少位小数,当整数部分超过512的时候 mysql总是以科学技术法的方式来保存数据....

不知道这个分析对不对?

如果操作天文数字的(20位数字以上),请选择Decimal 类型
(长度,小数点)尽量匹配你的位数,你上面的5,2已经溢出写不进去的

太深奥了。。。留个记号 回来学习。。飘走~~~~

不管实际得出什么结果。请遵循一条,永远在数据库中操作正常的数据。当范围超出定义的范围后。系统无论出现什么情况都应当视为无效数据。从项目经验来看,研究这种问题浪费时间不值得,应该研究官方认为应该是这样的,但却不是这样。发生这种情况时,很可能是官方的软件bug,所以一般用补丁解决。不必过多投入时间。

宽度限制了5 值太大溢出了