我正在尝试将以下十六进制字符串:“41630D54FFF68872”转换为9988776.0(float-64)。
使用单精度float-32,我会这样做:
int intBits = Long.valueOf("hexFloat32", 16).intValue();
float floatValue = Float.intBitsToFloat(intBits);
但抛出一个:java.lang.NumberFormatException:使用上面的64位十六进制时无限或NaN。
如何将十六进制转换为使用64位IEEE-754编码的双精度浮点数?
谢谢
答案 0 :(得分:2)
你想要双精度,所以Float不是正确的类 - 那就是单精度。
相反,您需要Double类,特别是Double.longBitsToDouble。
答案 1 :(得分:0)
几乎正确。只需省略valueOf调用中的双引号:
String hexString = "41630D54FFF68872";
long longBits = Long.valueOf(hexString,16).longValue();
double doubleValue = Double.longBitsToDouble(longBits);
System.out.println( "double float hexString is = " + doubleValue );