1

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

? 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中是否有任何内置的正常舍入?

4

2 回答 2

3

如果你四舍五入6.03499到 3 位,那6.035就是 - 这是正确的。
如果你四舍五入6.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

于 2013-08-27T08:04:21.380 回答
1

将 6.0349 舍入到小数点后两位不是 6.04,因此,不,没有这样的功能。四舍五入将四舍五入。因此,如果四舍五入到小数点后 0,6.0000000001 也将变为 7。

于 2013-08-27T08:01:14.580 回答