You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:12:43