Excel VBA与双打四舍五入

我试图做一个非常准确的计算使用与我的工作表中的单元格的双打。 当我testing我写了下面的代码:

Sub MacroTest() Dim opt As Worksheet Set opt = Sheets("Optimisation") Dim test As Double test = CDec(opt.Cells(2, 10)) End Sub 

在单元格J2中是十进制值 – £3,298.8599993 …然而,在debugging代码时,显然testingdouble只是提取-3298.86作为值。 我不明白为什么这会是我认为双打比这更准确。 大部分我已经阅读的post似乎认为,使用CDec应该排除这个问题,但如所示,这似乎不适用于我。

注 – J2中的值是使用公式计算出来的,不知道这是否有什么区别。 任何帮助非常感谢 – 谢谢。

在这种情况下opt.Cells(2, 10).Value2您应该使用opt.Cells(2, 10).Value2 。 Range.Value2属性 :

此属性和Value属性之间的唯一区别是Value2属性不使用货币和date数据types。 您可以使用Double数据types将使用这些数据types格式化的值作为浮点数返回。

因此,如果单元格被设置为货币,则默认的.Value将返回Currency ,而.Value2将返回Double

我还不能评论,但是这是你的代码有什么问题:

您正在使用双数据types的CDec转换公式,并将此函数的结果再次放入双数据types中。 所以你在这里没有获得任何准确的明智。

您确定要使用双数据types,而您可以在VBA中使用decimal-datatype?

在我的例子中,单元格“A1”包含十进制数字3298.859999。

 Dim varDec As Variant varDec = CDec(Range("A1").Value2) Debug.Print "Value in A1 : " & Format(varDec, "0.0000000000000000000000") 

在VBA中不可能将variables直接转换为Decimal-数据types,但Variant-datatype将Decimal-数据types作为子types。

要亲自看到这一点,请在debugging时查看VBE中的“本地”窗口。 它会显示:

 Expression : var Value : 3298.859999 Type : Variant/Decimal 

关于Excel数字精度的背景文章