Members

Technology Zones

IBM Learning Center

Articles

Hosted By

MaximumASP

Info

Rated
Read 24,855 times

Related Categories

A better rounding function

phracker76

VB's built in round function will round numbers like 12.085 down to 12.08. This is not correct in all cases as this number should be rounded up to 12.09. This round function allows for this.


Public Function RoundAdv(ByVal dVal As Double, Optional ByVal iPrecision As Integer = 0) As Double
       Dim roundStr As String
       Dim WholeNumberPart As String
       Dim DecimalPart As String
       Dim i As Integer
       Dim RoundUpValue As Double
       roundStr = CStr(dVal)
       
       If InStr(1, roundStr, ".") = -1 Then
           RoundAdv = dVal
           Exit Function
       End If
       WholeNumberPart = Mid$(roundStr, 1, InStr(1, roundStr, ".") - 1)
       DecimalPart = Mid$(roundStr, (InStr(1, roundStr, ".")))
       If Len(DecimalPart) > iPrecision + 1 Then
           Select Case Mid$(DecimalPart, iPrecision + 2, 1)
               Case "0", "1", "2", "3", "4"
                   DecimalPart = Mid$(DecimalPart, 1, iPrecision + 1)
               Case "5", "6", "7", "8", "9"
                   RoundUpValue = 0.1
                   For i = 1 To iPrecision - 1
                       RoundUpValue = RoundUpValue * 0.1
                   Next
                   DecimalPart = CStr(Val(Mid$(DecimalPart, 1, iPrecision + 1)) + RoundUpValue)
                   If Mid$(DecimalPart, 1, 1) <> "1" Then
                       DecimalPart = Mid$(DecimalPart, 2)
                   Else
                       WholeNumberPart = CStr(Val(WholeNumberPart) + 1)
                       DecimalPart = ""
                   End If
           End Select
       End If
       RoundAdv = Val(WholeNumberPart & DecimalPart)

   End Function

Erm I went to school, then college and then i got a job... In programming. I like to fly planes and go fishing. I dont like brussle sprouts or cabbage. Love walker's squares. And coke (as in cola)

Comments

  • Re: [4252] A better rounding function

    Posted by NongOil on 23 Apr 2007

    Please try this


    Public Function RoundAdv(ByVal Number As Variant, Optional lDigit As Long = 0) As Double
        
       If Not IsNumeric(Number) Then Exit ...

  • A better rounding function

    Posted by tsutommy on 14 May 2004

    This current function fails for some decimal values. A -.99 which would round to -1, rounds to 0 with the current code. Sorry, I can't remember the other issue I had with it but my fixes below took ...