float和double类型的奇怪问题,高手请进

wweijie 2003-07-24 10:47:58
我将8E16存入一个double类型则存储为80000000000000000正常,
如果存到float字段,则变为80000002180513792,
为什么会这样?
...全文
36 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
trainee 2003-08-01
  • 打赏
  • 举报
回复
我进行了测试:

1。若FLOAT字段,有标明NUMBER SCALE时 ,比如FLOAR(12,2)
插入8E16, 则变为80000002180513792

2。若不注明NUMBER SCALE,
插入8E16, 则变为8000000000000000
插入1234567890123456 , 则变为 1.234567E16

3. 其他的数据库POSTGRESQL
不能注明NUMBER SCALE, 效果同2

一个4字节的存储位,若是整型字节,最大数为4294967296
如是浮点数,它还要分成两部分,一部分为精度,一部分为长度.
精度可想而知.
wweijie 2003-07-30
  • 打赏
  • 举报
回复
FLOAT, DOUBLE 都是浮点类型, 在计算机里存储的是近似值,这个大家都知道。但我认为误差这么大是不能接受的。不知道其它数据库是否也存在这个问题。

trainee 2003-07-25
  • 打赏
  • 举报
回复
FLOAT, DOUBLE 都是浮点类型, 在计算机里存储的是近似值,
DOUBLE(8BYTES)的精度比FLOAT(4BYTES)高。
精度越高,存储位越大,
看你应用的需求,选择合适的数据类型。
如果你要很高的精度(比如货币之类),可以选择DECIMAL类型
代价是存储位和速度的开销。

56,940

社区成员

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

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