• 全部
  • 问答

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

wweijie 2003-07-24 10:47:58
我将8E16存入一个double类型则存储为80000000000000000正常,
如果存到float字段,则变为80000002180513792,
为什么会这样?
...全文
12 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过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类型
代价是存储位和速度的开销。
回复
相关推荐
发帖
MySQL
创建于2007-09-28

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-07-24 10:47
社区公告
暂无公告