Why converting from float to double changes the value?
double, floating-point, ieee-754, java, precision
Solution
The value of a `float` does not change when converted to a `double`. There is a difference in the displayed numerals because more digits are required to distinguish a `double` value from its neighbors, which is required by the Java documentation. That is the documentation for `toString`, which is referred (through several links) from the documentation for `println`.
The exact value for `125.32f` is 125.31999969482421875. The two neighboring `float` values are 125.3199920654296875 and 125.32000732421875. Observe that 125.32 is closer to 125.31999969482421875 than to either of the neighbors. Therefore, by displaying “125.32”, Java has displayed enough digits so that conversion back from the decimal numeral to `float` reproduces the value of the `float` passed to `println`.
The two neighboring `double` values of 125.31999969482421875 are 125.3199996948242045391452847979962825775146484375 and 125.3199996948242329608547152020037174224853515625. Observe that 125.32 is closer to the latter neighbor than to the original value (125.31999969482421875). Therefore, printing “125.32” does not contain enough digits to distinguish the original value. Java must print more digits in order to ensure that a conversion from the displayed numeral back to `double` reproduces the value of the `double` passed to `println`.
Problem
I've been trying to find out the reason, but I couldn't. Can anybody help me? Look at the following example. ``` float f = 125.32f; System.out.println("value of f = " + f); double d = (double) 125.32f; System.out.println("value of d = " + d); ``` This is the output: ``` value of f = 125.32 value of d = 125.31999969482422 ```