AFAIK VFP has the same precision since many versions and VFP9 can't store numbers with more precision, as it does not use more bytes than earlier versions. It's using the floating point standard and that hasn't changed for many many years.
You need to take into account the number stored in memory, not the number displayed.
When displaying it on screen behind he scenes this stored number is converted, depending on settings like SET DECIMALS and it's translated to the decimal system while stored in the dual system. Take aside the decimals, even this conversion alone can change the display compared to the number in memory.
In your case 1333365.89 can't be stored exactly in dual system. It's dual representation is slightly lower. In the calculation *100 without INT this slightly difference is not making a difference in the conversion back to the decimal display. You could say the conversion error forth and back compensates each other. If you calculate INT() it's done on the slightly lower dual representation, which rounds it down, remember INT() is not rounding, its cutting decimals.
Help says numeric precision is approximately 15 decimals. This is only true for numbers <1. As numbers are stored as floating point, as the name says the point floats. If a number is higher as 1, the number is kind of normalized to 1 (it's divided by 2 - shifted in the dual representation - while being >1) and an exponent is stored. So with numbers having more than 15 digits in front of the decimal point the precision even ends before it.
And seen from your example it can even end if you only have 10 relevant digits. The error is in the order of the 15 digits precision, so perhaps in memory 1333365.89*100 is something like 133336588.999999. But despite of that precision it is cut down to 133336588 by int() of course. int can't decide that this is sooo close to 133336589 that the user may really want 133336589 depite of the definition of int(), int() has to take the number passed to it for granted.
Even when setting DECIMALS TO 18 you can't get more precision than floating point numbers offer. This makes only sense for numeric fields, in which numbers are stored as c(20) strings. But everytime you calculate it's done with floating point numbers, just the money/currency field type allows a different way of calculating.
Take a look at the topic "Numeric Data Type" of VFP9 and even more details are said at
, which is recommended in this help topic.
Bye, Olaf.