Article ID: 157954
Article Last Modified on 12/1/2003
APPLIES TO
- Microsoft Visual FoxPro 3.0 Standard Edition
- Microsoft Visual FoxPro 3.0b Standard Edition
- Microsoft Visual FoxPro 5.0 Standard Edition
- Microsoft Visual FoxPro 6.0 Professional Edition
This article was previously published under Q157954
SYMPTOMS
Using the ROUND() function after performing mathematical calculations on
certain numeric values does not produce the correct result. The resulting
number is not rounded correctly to the proper decimal place.
CAUSE
For some numeric values, the precision limit within FoxPro decreases after
performing mathematical calculations.
RESOLUTION
Use the Currency data type when more accurate rounding of numeric values is
necessary. However, using the Currency data type does not fix all rounding
problems.
The following code example provides a workaround by converting the numeric
contents of mpay to a string. Then the VAL() function converts the string
back to a numeric data type for use in the ROUND() function.
CLEAR
mrate = 86.173125
mhours = 24.0000
mpay = mhours * mrate
? mpay
test=STR(mpay,LEN(STR(mpay)),LEN(STR(mpay)))
? ROUND(mpay, 2)
? ROUND(VAL(test),2)
The code first returns the value of mpay. Next the incorrectly rounded
value, followed by the correctly rounded value, appears. The above code may
produce the correct result with every occurrence of rounding errors in
Visual FoxPro.
The discrepancy of the ROUND() function's behavior is often related to a
decrease in precision as Visual FoxPro performs calculations on several
numbers. For instance, by placing the value of the variable mpay,
2068.1550000000, directly into the ROUND() function, the correct result
appears. Type the following in the Command window:
? ROUND(2068.1550000000,2)
The correct value appears.
STATUS
Microsoft has confirmed this to be a problem in the Microsoft products
listed at the beginning of this article.
Additional query words: kbdsd VFoxWin
Keywords: kbbug kb3rdparty KB157954