System.out.println(2.14656);
2.14656
System.out.println(2.14656%2);
0.14656000000000002
WTF?
doublefloating-accuracyfloating-pointieee-754
System.out.println(2.14656);
2.14656
System.out.println(2.14656%2);
0.14656000000000002
WTF?
Best Answer
The do give the expected results. Your expectations are incorrect.
When you type the double-precision literal
2.14656
, what you actually get is the closest double-precision value, which is:the
println
happens to round this when it prints it out (to 17 significant digits), so you see the nice value that you expect.After the modulus operation (which is exact), the value is:
Again, this is rounded when it gets printed, but because there is one less leading digit, the round point is one digit farther to the right, and so you see that trailing
2
.