最近在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?
谢谢大家帮小弟解惑。
一个是64位,一个是32位,64位到32位的转换,不应该是“0.12345678”吗?
精度损失 。
你可以将double型转成BigDecimal型,再用Format.
这个个人觉得是这样子的!精度损失...
个人推测的原因如下:还记得计算机原理的时候讲到数值转换的时候操作方式,大家还记得10进制转换到2进制的方法么?除2法则,而小数部分又是乘2原则,那么我们看你题中的问题,先使用乘2原则转换成二进制是多少???然后我相信你就知道为什么进度损失了???
其次说下为什么是使用二进制转换,这个问题就不要问了吧??