Round为什么会产生一个不同的结果比Application.Round

我发现VBA回合函数返回错误的结果。 我发现一个工作的替代方法是使用Application.Round来代替。

为什么VBA Round函数没有按预期工作?

 Sub roundingResults() Range("A1") = 123456.705 Debug.Print "Approach #1 " & Round(Range("A1").Value, 2) Debug.Print "Approach #2 " & Application.Round(Range("A1").Value, 2) End Sub 

产量

 Approach #1 123456.7 Approach #2 123456.71 

对于如何四舍五入没有完全正确的答案。 差异与如何处理完全落在中点的价值观有关。 在这种情况下, Application.Round将总是四舍五入。 例如0.5将舍入到1.0。 VBA.Round将打破最接近的偶数

 1.5-->2 2.5-->2 3.5-->4 

等等。 这是减less总是四舍五入的固有偏见的几种方法之一。

此外,如果有兴趣, 这个维基百科文章中有一个相当广泛的四舍五入讨论