Hi,
The issue is the rounding you can't really avoid. Not only can (most) integer numbers not be represented exactly in a 32 bit floating point value, also most *real* numbers cannot be represented, either. Consider your number:
2147470000.00
This is converted to 32 bit floating point as:
4EFFFF95
Which is:
+1 .11111111111111110010101 x 2^30
If you look at the floating point numbers in this area (the density of floating point numbers is not uniform), you will see:
4EFFFF94 = 2147469824.00
4EFFFF95 = 2147469952.00
4EFFFF96 = 2147470080.00
So you can see that for the number you requested (2147470000.00) the compiler had to choose the nearest floating point value (based on its rounding algorithm), and it chose 4EFFFF95. But once you tried to print it back out, it no longer knew what you requested -- only the real number -- so it printed it out exactly as 2147469952.00.
There are floating point calculators on the web which allow you to do this, such as:
-- Rich