mysql Float类型和double类型的区别

fanyi2003 2005-03-11 07:38:24
我在mysql数据库中设置了float(32,5)类型的数据 插入数据3947483999会变成3947483904.00000 而改成double(32,5)就正常了
请问:为什么会出现这种现象?
float,double型的数据在mysql中的存储方式是什么样的
...全文
4103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanyi2003 2005-03-14
  • 打赏
  • 举报
回复
就是因为看了<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总是以科学技术法的方式来保存数据....

不知道这个分析对不对?
  • 打赏
  • 举报
回复
FLOAT[(M,D)] [ZEROFILL]
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。
DOUBLE[(M,D)] [ZEROFILL]
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。
jxhj 2005-03-11
  • 打赏
  • 举报
回复
double比float支持的位數要長

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧