Microsoft KB Archive/157954

= BUG: ROUND Function Not Rounding Properly After Calculations =

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.



MORE INFORMATION
The following code examples illustrate possible rounding problems that may be encountered in Visual FoxPro.

Steps to Reproduce Behavior
  Create a program that contains the following lines of code: mrate = 86.173125 mhours = 24.0000 mpay = mhours * mrate ? mpay ? ROUND(mpay, 2)  Close the program and run it. The ROUNDfunction returns 2068.15. This is incorrect. The value is not rounded correctly to the second decimal place. The correct value should be 2068.16.

Additional query words: kbdsd VFoxWin

Keywords: kbbug kb3rdparty KB157954

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.