Sounds strange... Float accuracy is low, but not that bad... :-)
Did you run it all under debugger, check the value immediately before getting a string representation? Could be some bug. By the way, float is used rarely, as the accuracy is often not enough, usually people use double... All System.Math is written in double only.
--SA