I’ve read a lot about float representation recently (including this: How To Represent 0.1 In Floating Point Arithmetic And Decimal).
Now I understand that 0.1 can’t be represented correctly, and when I do this:
System.out.println(2.0f - 1.9f);
I’ll never get precise result.
So the question is:
How represented 0.1f in the following code in order to print 0.1 correctly?
Is that some kind of syntatic sugar?
In the article that I above mentioned says: 0.1 represented in memory as 0.100000001490116119384765625. So why I don’t get this output for this code:
System.out.println(0.1f);
How does Java deal with this?
System.out.printlnperforms some rounding for floats and doubles. It usesFloat.toString(), which itself (in the oraclew JDK) delegates to theFloatingDecimalclass – you can have a look at the source ofFloatingDecimal#toJavaFormatString()for gory details.If you try:
You will see the real value of 0.1f: 0.100000001490116119384765625.