gpt4 book ai didi

vba - 四舍五入到最接近的数字倍数

转载 作者:行者123 更新时间:2023-12-05 03:15:20 25 4
gpt4 key购买 nike

question has already been asked for the C++ language但我需要一个 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

这是我目前所拥有的。它大部分时间都有效,但对于小于倍数 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

例如:

RoundUp(49.50, 50)
'Returns 49.50 because rmndr = 0

最佳答案

我会简单地除以 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

我实际上不是 VBA 程序员,所以这可能需要调整一两个逗号。然而重要的是:

  • 为精度使用小数(变体子类型)
  • 让 VB 为您计算

关于vba - 四舍五入到最接近的数字倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com