VBA终极四舍五入

我已经读了很多关于在Excel中四舍五入。 我发现VBA的Round()函数使用“Bankers四舍五入”,而Application.WorksheetFunction.Round()使用或多或less的“正常”四舍五入。 但是这并没有帮助我理解这一点:

? Round(6.03499,2) 6.03 

为什么? 我想看6.04,而不是6.03! 诀窍是这样的

 ? Round(Round(6.03499,3),2) 6.04 

我想了一下,开发了一个这样的子程序:

 Option Explicit Function DoRound(ByVal value As Double, Optional ByVal numdigits As Integer = 0) As Double Dim i As Integer Dim res As Double res = value For i = 10 To numdigits Step -1 res = Application.Round(res, i) Next i DoRound = res End Function 

它工作正常。

 ? DoRound(6.03499,2) 6.04 

但这并不酷。 Excel中是否有内置的正常舍入?

如果你将6.0356.03499到3位数,它将是6.035 – 这是正确的。
如果你将6.034996.03499到2位数,它将是6.03 – 这是正确的

但是 – 例如,您首先舍入到3位数字,然后到2也是正确的,通过以下语句:
Round(6.03499, 3)给出6.035
Round(6.035, 2)给出6.04

如果你想Round(6.03499, 2)给6.04你必须使用Application.WorksheetFunction.RoundUp

将6.0349舍入到两位小数只是不是6.04,否则不存在这样的函数。 整理将圆满结束。 因此,如果你舍入到0小数,6.0000000001也将变成7。