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 care of both my problems.
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
Dim negative As Boolean
roundStr = CStr(dVal)
If InStr(1, roundStr, ".") = 0 Then
RoundAdv = dVal
Exit Function
End If
If dVal < 0 Then
negative = True
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
If negative Then
WholeNumberPart = CStr(Val(WholeNumberPart) - 1)
Else
WholeNumberPart = CStr(Val(WholeNumberPart) + 1)
End If
DecimalPart = ""
End If
End Select
End If
RoundAdv = Val(WholeNumberPart & DecimalPart)
If RoundAdv <> 0 Then
If negative And RoundAdv > 0 Then
RoundAdv = -1 * RoundAdv
End If
End If
Enter your message below
Sign in or Join us (it's free).