Microsoft KB Archive/209996

= ACC2000: How to Round a Number Up or Down by a Desired Increment =

Article ID: 209996

Article Last Modified on 10/11/2006

-

APPLIES TO


 * Microsoft Access 2000 Standard Edition

-



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:

For example:
 * RoundToNearest(3.33, 0.1, up) returns the value 3.4.
 * RoundToNearest(3.33, 0.1) returns the value 3.3.

  Create a module and type the following line in the Declarations section if it is not already there: Option Explicit   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   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. 

