Floats, as others mentioned, are pretty much non-deterministic. There's not really anything you can do about that, unfortunately.
For example, if you throw in the number 5 into a table and then truncate it, you may end up with 4.000, since 5 may end up getting represented in memory as 4.9999.
If you try to work around that by Rounding, this is the same problem as 5.5 may actually get stored as 5.49999, which would round to 5.
You could try little tricks like adding 0.25 and then truncating, but I think that this is completely missing the point of FLOATS.
Ultimately, they are--on their own--pretty non-deterministic. This is, interestingly enough, a problem with the architecture and will spread across all use of floats within the operating system (meaning all languages and applications, including databases).