I'm probably going to get bit for this since it doesn't directly answer your question, however I think it needs to be noted.
You should avoid using a float (decimal) to control a loop. Basically, it boils down to what you're seeing there when the control for the loop does something unexpected. It's just good practice to avoid it since many languages suffer from this sort of thing.
----
Is it fair to stick a link to my site here?
Thanks for you patience.