Is there a way to reverse a long I got from Double.toLongBits back to a Double?
The following does not work:
Double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(new Double(Double.doubleToLongBits(n)));
this prints:
4640231336019091517
4.6402313360190915E18
While I wanted to get back the 171.30672219
CodePudding user response:
As the documentation for doubleToLongBits says:
In all cases, the result is a long integer that, when given to the
longBitsToDouble(long)method, will produce a floating-point value the same as the argument todoubleToLongBits(except all NaN values are collapsed to a single "canonical" NaN value).
double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(Double.longBitsToDouble(Double.doubleToLongBits(n)));
CodePudding user response:
You can do it like this.
Double n = 171.30672219;
long bits = Double.doubleToLongBits(n);
double d = Double.longBitsToDouble(bits);
System.out.println(d);
prints
171.30672219
Welcome to the world of IEEE 754.
