XL: Value Returned by Format Function May be Different

Last reviewed: January 7, 1998
Article ID: Q173247
The information in this article applies to:
  • Microsoft Excel 97 for Windows
  • Microsoft Excel for Windows 95, versions 7.0, 7.0a
  • Microsoft Excel for Windows, versions 5.0, 5.0c

SYMPTOMS

When you run a Visual Basic for Applications code that uses the Format function to return a value using a specific format, the function may return a slightly different value, depending on what version of Microsoft Excel you are using.

CAUSE

This problem may occur when the following conditions are true:

  • The format expression specified in the Format function uses fewer decimal places than the value being passed to the function. As a result, the value is rounded by the Format function.

        -and-
    
  • The value being passed to the Format function ends in the digit 5. For example:

          1.15
          0.075
          8.885
    

WORKAROUND

There are two methods you can use to prevent this problem from occurring:

  • Use the Round method of the Application object to round the value to the same number of decimal places as the format expression used by the Format function.

    For example, instead of this

          X = Format(0.075, "$#.##")
    

    use this:

          X = Format(Application.Round(0.075, 2), "$#.##")
    

    The Round method accepts two arguments; the value to be rounded (in this case, 0.075), and the number of decimal places to which you want the value to be rounded (in this case, 2).

  • Increase the number of decimal places used by the Format function. For example:

          X = Format(0.075, "$#.###")
    

    Since the value and the format expression both use three decimal places, the problem will not occur.

STATUS

This behavior is by design in Microsoft Excel.

MORE INFORMATION

You can demonstrate this problem by running Visual Basic code that includes the following line:

   MsgBox Format(0.075, "$#.##")

In Microsoft Excel 5.x, the message box displays the value $.08. In Microsoft Excel 7.x and Microsoft Excel 97, the message box displays the value $.07.

Note that the format expression ("$#.##") in this example uses two decimal places, and that the value being passed to the function (0.075) uses three decimal places. Because of this, the Format function rounds the value to two decimal places before applying the format to the value, and the problem may occur.

If you change the format expression to "$#.###", or if you first round the value (0.075) to two decimal places, the message box displays the same value in all versions of Microsoft Excel. The problem only occurs when the value uses more decimal places than the format expression.


Additional query words: XL97 XL7 XL5 IEEE
Keywords : xlvbainfo
Version : WINDOWS:5.0,5.0c,7.0,7.0a,97
Platform : WINDOWS
Issue type : kbprb


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: January 7, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.