This is an issue with how floating point numbers are handled.
0.47 is converted from a string into binary to be manipulated. Then you do stuff to it. Finally it is converted back into a string (in base 10) to be displayed. The problem is that some decimal numbers (floating points) can’t be exactly defined in a finite number of binary places. This is exactly the same problem you have with representing 1/3 in decimal notation in base10 (0.333333333…)
A lengthly explanation of a similar bug in excel where it displays the incorrect result of 77.1*850 can be seen here: <a href=”http://www.joelonsoftware.com/items/2007/09/26b.html”>Explaining the Excel Bug</a>