这个问题已经被问到 C++ 语言,但我需要一个 VBA 函数。我尝试将 C++ 函数转换为 VBA,但它没有返回正确的值。
我需要一个执行以下操作的函数:
RoundUp(23.90, 5)
'return 25
RoundUp(23.90, 10)
'return 30
RoundUp(23.90, 20)
'return 40
RoundUp(23.90, 50)
'return 50
RoundUp(102.50, 5)
'return 105
RoundUp(102.50, 20)
'return 120
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的。它在大多数情况下都有效,但对于比倍数小 0.5 的数字返回不正确的值。所以这个问题似乎是我如何计算余数的一个舍入问题。
Public Function RoundUp(dblNumToRound As Double, lMultiple As Long) As Double
Dim rmndr As Long
rmndr = dblNumToRound Mod lMultiple
If rmndr = 0 Then
RoundUp = dblNumToRound
Else
RoundUp = Round(dblNumToRound) + lMultiple - rmndr
End If
End Function
Run Code Online (Sandbox Code Playgroud)
例如:
RoundUp(49.50, 50)
'Returns 49.50 because rmndr = 0
Run Code Online (Sandbox Code Playgroud)
我只是简单地除以lMultiple,向上取整并再次相乘。
假设您确实总是想要四舍五入(也适用于负数):
Public Function RoundUp(dblNumToRound As Double, lMultiple As Long) As Double
Dim asDec as Variant
Dim rounded as Variant
asDec = CDec(dblNumToRound)/lMultiple
rounded = Int(asDec)
If rounded <> asDec Then
rounded = rounded + 1
End If
RoundUp = rounded * lMultiple
End Function
Run Code Online (Sandbox Code Playgroud)
我实际上不是 VBA 程序员,所以这可能需要调整一两个逗号。然而重要的是: