You should add a Log(i) after the loop is done to see what the value is. Without testing, my guess is that it's 0.20000000001 or something like that, which is why it's not giving you that last value. As for why this happens, remember doubles are internally stored in a binary format. This means some decimal values cannot be stored in their exact form. That is why you get these small rounding errors and "long strange decimal numbers", as you put it.
Whenever possible, you should prefer integers for loop indices.