Couldnt you just use cout << fixed << setprecission(2) and then just make it a double instead of a float. That is easier than rewriting how the program was intended to run.
Then it's definitely not that. Precision problems when converting between decimal and floating point are not at all strange, and they are pretty consistent (in the sense that they're always there).