В Java довольно просто преобразовать двойную строку в шестнадцатеричную. Но как мне сделать наоборот? Мой код приведен ниже, и я заметил, где возникает исключение NumberFormatException
(примерно на 2/3 меньше).
public class HexToDoubleTest {
public static void main( String args[] ) {
// This is the starting double value
double doubleInput = -9.156013e-002;
// Convert the starting value to the equivalent value in a long
long doubleAsLong = Double.doubleToRawLongBits( doubleInput );
// Convert the long to a String
String doubleAsString = Long.toHexString( doubleAsLong );
// Print the String
System.out.println( doubleAsString );
// Attempt to parse the string back as a long
// !!! This fails with a NumberFormatException !!!
long doubleAsLongReverse = Long.parseLong( doubleAsString, 16 );
// Convert the long back into the original double
double doubleOutput = Double.longBitsToDouble( doubleAsLongReverse );
// Confirm that the values match
assert( doubleInput == doubleOutput );
}
}
Использование Double.valueOf
не работает таким же образом.
Изменить: я Я уже сделал несколько поисков в Интернете и нашел несколько очень неэлегантных решений. Например: использование BigInteger
кажется излишним. Должен быть способ получше!