Двойное преобразование в шестнадцатеричную строку и обратно

В 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 кажется излишним. Должен быть способ получше!

7
задан Andy 17 November 2015 в 21:34
поделиться