Java - Преобразование шестнадцатеричного в IEEE-754 64-разрядное число с плавающей запятой - двойная точность
Я пытаюсь преобразовать следующую шестнадцатеричную строку: "41630D54FFF68872" в 9988776.0 (float-64).
С одинарной точностью float-32 я бы сделал:
int intBits = Long.valueOf("hexFloat32", 16).intValue();
float floatValue = Float.intBitsToFloat(intBits);
но это выдает: java.lang.NumberFormatException: Infinite или NaN при использовании 64-битного гексагона выше.
Как преобразовать шестнадцатеричное число в число с плавающей запятой двойной точности, закодированное в IEEE-754 с 64 битами?
Спасибо
2 ответа
Решение
Вам нужна двойная точность, поэтому Float - не тот класс - это для одинарной точности.
Вместо этого вам нужен класс Double, в частности Double.longBitsToDouble.
Почти правильно. Просто опустите двойные кавычки в вызове valueOf:
String hexString = "41630D54FFF68872";
long longBits = Long.valueOf(hexString,16).longValue();
double doubleValue = Double.longBitsToDouble(longBits);
System.out.println( "double float hexString is = " + doubleValue );