ACC2000: How to Round a Number Up or Down by a Desired Increment (209996)



The information in this article applies to:

  • Microsoft Access 2000

This article was previously published under Q209996
Moderate: Requires basic macro, coding, and interoperability skills.

This article applies to a Microsoft Access database (.mdb) and to a Microsoft Access project (.adp).

SUMMARY

This article shows you how to create a procedure that rounds a number up or down by a specified increment. For example, given the number 3.23, rounding to the nearest .05 results in the number 3.25. The procedure in this article accepts any positive rounding increment as a parameter. In addition to rounding numbers to the nearest fractional amount, you can also round to whole numbers, such as 1, 10, or 100.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.

MORE INFORMATION

The following example creates a user-defined function called RoundToNearest, which accepts three parameters:
ParameterValue
dblNumberThe numeric value you want to round
varRoundAmountThe increment to which dblNumber will be rounded
varUpAn optional argument: include to round up; omit to round down
For example:
  • RoundToNearest(3.33, 0.1, up) returns the value 3.4.
  • RoundToNearest(3.33, 0.1) returns the value 3.3.
  1. Create a module and type the following line in the Declarations section if it is not already there:
    Option Explicit
  2. Create the following procedure:
    Function RoundToNearest(dblNumber As Double, varRoundAmount As Double, _
       Optional varUp As Variant) As Double
                
       Dim dblTemp As Double
       Dim lngTemp As Long
          
       dblTemp = dblNumber / varRoundAmount
       lngTemp = Clng(dblTemp)
          
       If lngTemp = dblTemp Then
             RoundToNearest = dblNumber
       Else
          If IsMissing(varUp) Then
             ' round down
             dblTemp = lngTemp
          Else
             ' round up
             dblTemp = lngTemp + 1
          End If
          RoundToNearest = dblTemp * varRoundAmount
       End If
    End Function
  3. To test this function, type each of the following lines in the Immediate window, and then press ENTER:
    ?RoundToNearest(1.36, 0.25, up)
    Note that the procedure returns 1.5.
    ?RoundToNearest(1.36, 0.25)
    Note that the procedure returns 1.25.
    ?RoundToNearest(1.36, 0.75, up)
    Note that the procedure returns 1.5, which is two increments of 0.75.

REFERENCES

For additional information about rounding, click the article numbers below to view the articles in the Microsoft Knowledge Base:

210564 ACC2000: Round or Truncate Currency Values to the Intended Number of Decimals

210423 ACC2000: Rounding Errors When You Use Floating-Point Numbers


Modification Type:MinorLast Reviewed:10/11/2006
Keywords:kbinfo kbProgramming KB209996