PRB: ROUND() Function Not Rounding Properly After CalculationsLast reviewed: October 29, 1996Article ID: Q157954 |
The information in this article applies to:
SYMPTOMSUsing 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.
CAUSEFor some numeric values, the precision limit within FoxPro decreases after performing mathematical calculations.
WORKAROUNDUse 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.
MORE INFORMATIONThe following code examples illustrate possible rounding problems that may be encountered in Visual FoxPro.
Steps to Reproduce Behavior
|
KBCategory: kb3rdparty kbprb
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |