In a language whose library functions include things like Rate (interest rate per period for an annuity), SYD (sum-of-years' digits depreciation of an asset for a specified period), and IRR (internal rate of return for a series of periodic cash flows), you would imagine that a VB6 programmer would think that maybe ... just maybe ... the designers of VB would be insightful enough to include a function that rounded off numbers. Apparently not all programmers (especially Steve's predecessor) have that kind of intuition. To be fair though, his function is a bit more convenient than Round: global variables are used instead of cumbersome parameters to specify the number of places and fractional portion of a number ...
'******************************************************************* ' Purpose: Performs rounding of prices based on input price and ' the global variable round_to_digits '******************************************************************* Public Function Round_price(curr_price As Double) As Double Dim pr8 As Double Dim dec As Integer Dim intPos As Integer Dim strFraction As String Dim dblTempVal As Double Dim dblNewPrice As Double If (intFractions = 0) Then If round_to_digits = -1 Then Round_price = CDbl(curr_price) Else pr8 = curr_price * (10 ^ round_to_digits) dec = Int((pr8 - Int(pr8)) * 10) If dec >= 5 Then pr8 = Int(pr8) + 1 Else pr8 = Int(pr8) End If Round_price = CDbl(pr8 / CDbl(10 ^ round_to_digits)) End If Else ' ' Find decimal point in string ' intPos = InStr(1, CStr(curr_price), ".") If (intPos <> 0) Then strFraction = Mid(CStr(curr_price), intPos + 1) If (intFractions = 32) Then strFraction = Left(strFraction & "00", 3) dblTempVal = CDbl(strFraction) / 320 Else dblTempVal = CDbl(strFraction) / CDbl(intFractions) End If dblNewPrice = CDbl(Left(CStr(curr_price), intPos - 1)) + dblTempVal Else dblNewPrice = curr_price End If If round_to_digits = -1 Then Round_price = CDbl(dblNewPrice) Else pr8 = dblNewPrice * (10 ^ round_to_digits) dec = Int((pr8 - Int(pr8)) * 10) If dec >= 5 Then pr8 = Int(pr8) + 1 Else pr8 = Int(pr8) End If Round_price = CDbl(pr8 / CDbl(10 ^ round_to_digits)) End If End If End Function