我正在尝试使用与工作表中的单元格相关的双精度进行非常准确的计算。在测试时,我编写了以下代码:
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 ...但是在调试代码时,很明显测试双精度值只是取出-3298.86作为值。我不明白为什么会这样,因为我认为双打比这更准确。我读过的大多数帖子似乎都认为使用CDec应该排除这个问题,但是如图所示,这对我来说似乎不起作用。
注意 - J2中的值是使用公式计算的,不确定这是否有任何区别。非常感谢任何帮助 - 谢谢。
答案 0 :(得分:3)
在这种情况下,您应该使用opt.Cells(2, 10).Value2
。 Range.Value2 property:
此属性与Value属性之间的唯一区别是 Value2属性不使用Currency和Date数据类型。 您可以返回使用这些数据类型格式化的值 使用Double数据类型的浮点数。
因此,如果单元格格式为货币,则默认.Value
将返回Currency
,而.Value2
将返回Double
。
答案 1 :(得分:0)
我暂时无法发表评论,但是您的代码出现了问题:
您正在使用双数据类型的CDec转换公式,并且此函数的结果将再次置于双数据类型中。所以你在这里没有获得任何准确性。
您确定要使用双数据类型,而可以在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中无法将变量直接转换为Decimal-datatype,但Variant-datatype将Decimal-datatype作为子类型。
要自己查看:在调试时查看VBE中的" Locals" -window。它将显示:
Expression : var
Value : 3298.859999
Type : Variant/Decimal