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 lengthy explanation of a similar bug in excel where it displays the incorrect result of 77.1*850 can be seen here: Explaining the Excel Bug