Double类型只用8字节存储但范围为什么那么大

136 篇文章 5 订阅
23 篇文章 0 订阅
Double类型只用8字节存储但范围为什么那么大

double类型一般由:符号位、指数位、尾数构成。其中尾数位决定精度。

ODPS的Double描述:
类型     描述                 取值范围
Double   8字节双精度浮点数。  -1.0E308 ~ 1.0E308

Double用8字节双精度浮点数
1.0E+38
1.0乘以10的308次方,为什么会这么大?64位能表示的最大不应该是2^64吗?

1,因为double类型是浮点数,这种类型可以用科学记数法表示,所以表示范围非常大。
但是,使用可浮点数的代价就是损失了精度。它把这部分精度用于指数的表示。
所以double类型的优点就是数据范围大,缺点是精度不足,大概只有15~16位有效位数。

2,它表示大数的代价就是损失了精度。举个例子:假设我有0-9这10个数,我定义数n表示5n,那么这10个数最大能表示5*9=45。
能表示的范围是:0、5、10、15、20、25、30、35、40、45。最小值为0,最大值为45。所以表示的范围是:0~45。
但1、2、3、4,......,41,42,43,44这些不是5的倍数的数就没法精确表示了,只能在定义中把它们靠向0、5、......、40或者45。
这就是为了扩大表示范围而损失了表示精度。

Oracle NUMBER类型的最大字符个数是38
所以,Oracle NUMBER能表示的最大整数为:a = 99999999999999999999999999999999999999(38个9)
如果转换成DOUBLE,会丢失精度,用DOUBLE存储以后,实际的结果为:b = 1E38 即 10^38 = 100000000000000000000000000000000000000

显然:a ≈ b
但b不是我们期待的值,除非实际应用场景能够认可。
所有Oracle NUMBER不能简单的转为DOUBLE存储,会丢失精度。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值