You are making the mistake of assuming that integer division yields a floating point result - it doesn't: it yields an integer result and integers can't represent fractions.
In your code i/2231 is an integer division, and yields an integer result by rounding towards zero (hence always yields zero if i is in the range [0,2231) ).
You need to force the division i/2231 to be a floating point division to get the result you expect. For example;
ShowProgress = ((double)i / 2231) * 100;
or
ShowProgress = (i / 2231.0) * 100;