Floating-point numbers are not always stored as the exact values you expect. See e.g. The Perils of Floating Point .
In addition to the prior (correct) answer: the question you really should be asking is: "why doesn't this happen in other language levels?" To which the answer is: many of the other language levels interpret 5.03 as being an exact number (five and three hundredths) rather than as a floating-point number.