【问题标题】:Get a double from a long created from Double.toLongBits从 Double.toLongBits 创建的 long 中获取双精度
【发布时间】:2021-12-14 19:51:42
【问题描述】:
有没有办法将我从Double.toLongBits 得到的long 反转回Double?
以下方法不起作用:
Double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(new Double(Double.doubleToLongBits(n)));
打印出来:
4640231336019091517
4.6402313360190915E18
虽然我想找回171.30672219
【问题讨论】:
标签:
java
types
double
decimal
long-integer
【解决方案1】:
正如doubleToLongBits 的documentation 所说:
在所有情况下,结果都是一个长整数,当将其提供给 longBitsToDouble(long) 方法时,将产生一个与 doubleToLongBits 的参数相同的浮点值(除了所有 NaN 值都折叠为单个“规范”NaN 值)。
double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(Double.longBitsToDouble(Double.doubleToLongBits(n)));
【解决方案2】:
你可以这样做。
Double n = 171.30672219;
long bits = Double.doubleToLongBits(n);
double d = Double.longBitsToDouble(bits);
System.out.println(d);
打印
171.30672219
欢迎来到IEEE 754 的世界。