Excel VBA方法ROUND不正确

时间:2014-11-25 18:51:56

标签: excel excel-vba rounding vba

Public Function foo()
Dim x As Double, y As Double, z As Double

x = 1.26
y = 3.175
z = Round(x + y, 2)

foo = z
End Function

在Windows 7上运行Excel 2007.此函数将4.43返回到带有= foo()的单元格中,这很烦人,因为我想要4.44。我发现一些文档要求VBA ROUND使用甚至舍入,但这里最后一位数字是奇数。这有什么不对?

3 个答案:

答案 0 :(得分:2)

您始终可以使用工作表回合功能代替VBA的内置功能

Public Function foo2()
    Dim x As Double, y As Double, z As Double

    x = 1.26
    y = 3.175
    z = Application.WorksheetFunction.Round(x + y, 2)

    foo2 = z
End Function

foo2将导致4.44(在我的机器上测试)。我不知道这是否会影响性能。

答案 1 :(得分:1)

您将需要使用十进制类型来完成此操作,该类型使用基于整数的算法而不是基于浮点的算法。

Excel没有针对此的原生数据类型,因此您必须使用Variant,然后使用CDec函数转换为小数。

Public Function foo()
    Dim x As Variant, y As Variant, z As Variant

    x = CDec(1.26)
    y = CDec(3.175)
    z = Round(x + y, 2)

    foo = z
End Function

答案 2 :(得分:0)

尽管Excel.WorksheetFunction.Round确实进行了正确的4/5舍入,但是它的运行速度非常慢,并且当然需要安装Excel。

要快速,准确地舍入任何值-向上,向下,4/5,银行家,有效数字,以2为底或以10为底,等等-请转到我的项目VBA.Round