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 );
Другие вопросы по тегам