ACC: Rounding Errors Using Floating-Point Numbers

Last reviewed: August 29, 1997
Article ID: Q111781
The information in this article applies to:
  • Microsoft Access versions 1.0, 1.1, 2.0, 7.0, 97

SYMPTOMS

Novice: Requires knowledge of the user interface on single- user computers.

When you calculate using floating-point numbers, the result is not always what you expect. For example, if you use the CInt() (convert to integer) function in the calculation

   CInt(3.555 * 100)

you receive 356 as the result, as you expect. However, the calculation

   CInt(4.555 * 100)

results in 455 instead of 456.

CAUSE

Errors similar to the example above occur in any programming language that uses floating-point numbers. This is because decimal fractions do not always have exact binary equivalents, which can result in rounding errors.

RESOLUTION

There are several methods you can use to avoid rounding errors when you are using floating-point numbers:

  • If you are using Single numbers, convert them to Doubles and use formatting to hide the extra digits. If there are any rounding errors, they will occur at the end of the numbers where they will not affect the visible data.
  • Use the Currency data type. If you use currency values of four decimal places or less, rounding errors will not occur because these values are actually scaled integers rather than floating-point numbers. In code, use the at sign (@) character to use a Currency data type. For example, the calculation

          CInt(4.555@ * 100)
    

    results in a value of 456.

  • Break the calculation into two or more steps. When you list a calculation in one long line, Visual Basic (in version 7.0) or Access Basic (in earlier versions) stores the intermediate values internally. For example, in the calculation

          CInt(4.555 * 100)
    

    the value 455.5 is temporarily stored and used in the CInt() function. If you break the calculation into the two steps

          x = 4.555 * 100
          CInt(x)
    

    you avoid this internal storage and thus avoid the floating-point rounding error.


Additional query words: roundoff
Keywords : kbprg PgmOthr
Version : 1.0 1.1 2.0 7.0 97
Platform : WINDOWS
Hardware : x86
Issue type : kbprb
Solution Type : kbworkaround


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: August 29, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.