ACC: Round or Truncate Values to Desired Number of DecimalsID: Q97524
|
The Format property of a control can round a Number or Currency field to
the number of decimal places that you want. However, this does not change
the underlying data, which may contain additional digits that the control
does not display. If you add the values in this control, the sum is based
on the actual values and not on the displayed values. This may make the
total seem inaccurate.
This article shows you how to create four user-defined functions to
round or truncate data to two decimal places so that the displayed and
formatted value and the actual numeric or currency data are the same.
This article assumes that you are familiar with Visual Basic for
Applications and with creating Microsoft Access applications using the
programming tools provided with Microsoft Access. For more information
about Visual Basic for Applications, please refer to your version of the
"Building Applications with Microsoft Access" manual.
NOTE: Visual Basic for Applications is called Access Basic in Microsoft
Access versions 1.x and 2.0. For more information about Access Basic,
please refer to the "Introduction to Programming" manual in Microsoft
Access version 1.x or the "Building Applications" manual in Microsoft
Access version 2.0
The functions are presented in two styles. The first style is appropriate
for the AfterUpdate property of a form control to ensure that the data
entered matches the data that is displayed. The second style is for use in
expressions and calculated controls.
To round or truncate numbers to two decimal places, create a new module
and add the following functions.
'******************************************************
' Declarations section of the module
'******************************************************
Option Explicit
Const Factor = 100
'=====================================================
' RoundAU and TruncAU are designed to be added to the
' AfterUpdate property on a form control.
'=====================================================
Function RoundAU(X As Control)
X = Int(X * Factor + .5) / Factor
End Function
Function TruncAU(X As Control)
X = Int(X * Factor) / Factor
End Function
'=====================================================
' RoundCC and TruncCC are designed to be used in
' expressions and calculated controls on forms and reports.
'=====================================================
Function RoundCC(X)
RoundCC = Int (X * Factor + 0.5) / Factor
End Function
Function TruncCC(X)
TruncCC = Int (X * Factor) / Factor
End Function
Form: Products
--------------
Control Name: Unit Price
AfterUpdate: =TruncAU([UnitPrice])
If a user accidentally enters $23.055 instead of $23.05, the TruncAu()
function catches the mistake and changes the value to $23.05. If you
use the RoundAu() function instead, the function changes the value to
$23.06. If you use neither function, the value is displayed as $23.06,
but the entered value, $23.055, is used in any calculations.
In Microsoft Access 7.0 and 97:
Report: Summary of Sales By Year
--------------------------------
Control Name: QuarterSales
ControlSource: =Sum(RoundCC([SubTotal]))
Control Name: YearTotal
ControlSource: =Sum(RoundCC([SubTotal]))
In Microsoft Access 1.x and 2.0:
Report: Summary of Sales By Year
--------------------------------
Control Name: Total Sales for Quarter
ControlSource: =Sum(RoundCC([Order Amount]))
Control Name: Total Sales for Year
ControlSource: =Sum(RoundCC([Order Amount]))
If you use RoundCC(), the report sums the values displayed in the
report, even though the actual values may contain hidden digits.
10 = 1 decimal place
100 = 2 decimal places
1000 = 3 decimal places, and so on
Additional query words: int trunc precision rounding
Keywords : kbprg kbusage kbdta AccCon KbVBA
Version : WINDOWS:1.0,1.1,2.0,7.0,97
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: August 2, 1999