首页 新闻 会员 周边 捐助

double型的0.1234567812345678转为float型

0
悬赏园豆:10 [已关闭问题]

最近在java中碰到一个这样的问题:double d=0.1234567812345678赋值给一个float型变量,再输出这个float变量的值,就变成0.12345678了。java中float变量在内存里用32位来存的,double用64位来存。

查了下书,书上说float变量的取值范围是10的负38次方至10的38次方和-10的38次方至-10的负38次方,为什么取值范围不是类似-2的31次至2的31次什么的?这是第一个问题。

第2个问题,double型的0.1234567812345678 转化为float后,怎么就变成0.12345678?

谢谢大家帮小弟解惑。

JeffLiang的主页 JeffLiang | 初学一级 | 园豆:43
提问于:2010-05-11 22:41
< >
分享
其他回答(2)
0

一个是64位,一个是32位,64位到32位的转换,不应该是“0.12345678”吗?

Astar | 园豆:40805 (高人七级) | 2010-05-12 08:49
0

精度损失 。

你可以将double型转成BigDecimal型,再用Format.

三阶 | 园豆:1636 (小虾三级) | 2010-05-12 12:30
0

这个个人觉得是这样子的!精度损失...

个人推测的原因如下:还记得计算机原理的时候讲到数值转换的时候操作方式,大家还记得10进制转换到2进制的方法么?除2法则,而小数部分又是乘2原则,那么我们看你题中的问题,先使用乘2原则转换成二进制是多少???然后我相信你就知道为什么进度损失了???

其次说下为什么是使用二进制转换,这个问题就不要问了吧??

西越泽 | 园豆:10775 (专家六级) | 2010-05-22 22:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册