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使用甚至舍入,但这里最后一位数字是奇数。这有什么不对?
答案 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。