如何将Double.toLongBits生成的long值还原为Double类型?
如何将Double.toLongBits得到的long值还原回Double类型
嘿,我明白你碰到的问题了!你当前代码出错的核心原因是:你直接把doubleToLongBits生成的long值传给了Double的构造函数——这个构造函数的作用是把long数值本身转换成double,而不是把long当成double的二进制位来还原。
正确的还原方法:使用Double.longBitsToDouble()
Java提供了对应的逆向方法Double.longBitsToDouble(long bits),它的作用就是把long类型的值当成double的IEEE 754二进制位表示,重新解析回原始的Double值。
来看修正后的代码:
Double n = 171.30672219; long bits = Double.doubleToLongBits(n); // 用longBitsToDouble还原,而不是直接把long传给Double构造器 Double restoredDouble = Double.longBitsToDouble(bits); System.out.println("原始值: " + n); System.out.println("转换后的long位值: " + bits); System.out.println("还原后的Double值: " + restoredDouble);
这段代码的输出会是:
原始值: 171.30672219 转换后的long位值: 4640231336019091517 还原后的Double值: 171.30672219
为什么原来的方法不行?
你之前用new Double(Double.doubleToLongBits(n)),本质是把4640231336019091517这个long数值转换成double类型,所以得到了4.6402313360190915E18——这只是把long的数值放大成了double,完全没有利用它作为double二进制位的意义。
而doubleToLongBits和longBitsToDouble是一对互补的方法:
doubleToLongBits:将double的IEEE 754二进制表示转换成long类型(只是把二进制位序列当成long来存储)longBitsToDouble:把long的二进制位序列重新解析成对应的double值,完美还原原始数据
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

