声明一个变量为十进制数。

21
我正在优化一个在VBA中没有声明任何数据类型的宏,所以所有的东西都被编译器笨拙地当作变体处理。我正在处理科学测量,所以我需要精确度。
我应该如何声明Dim decAsdf as Decimal(不是这样,而是正确的方式)?
3个回答

24

您无法将变量声明为 Decimal - 您必须使用 Variant(但是您可以使用 CDec 将其填充为 Decimal 类型)。


1
例如:Dim v: v = CDec("123456789.123456789") - Rory
那么,每个十进制数都要在不同的行上声明吗? - user4974730
我不知道你的意思。声明就是“Dim”,它和任何其他变量类型没有区别。 - Rory
这个例子正确吗:Dim decMeanComp: decMeanComp = CDec("1234") - user4974730
2
是的。只是为了澄清-声明和赋值不必在同一行,我只是不能在评论中发布单独的代码行! - Rory

4
将变量声明为Decimal,需先声明为Variant,然后使用CDec进行转换。在监视窗口中类型应为Variant/Decimal

enter image description here

考虑到编程浮点算术不是我们在学校数学课上学习的内容,因此应尽可能避免常见陷阱,而在可能的情况下进行十进制转换,参考文献:Goldberg的文章
以下示例中,我们看到表达式:0.1 + 0.11 = 0.21,取决于收集品(0.1、0.11)是否声明为DoubleDecimal,结果可能为TrueFalse
Public Sub TestMe()

    Dim preciseA As Variant: preciseA = CDec(0.1)
    Dim preciseB As Variant: preciseB = CDec(0.11)

    Dim notPreciseA As Double: notPreciseA = 0.1
    Dim notPreciseB As Double: notPreciseB = 0.11

    Debug.Print preciseA + preciseB
    Debug.Print preciseA + preciseB = 0.21 'True

    Debug.Print notPreciseA + notPreciseB
    Debug.Print notPreciseA + notPreciseB = 0.21 'False

End Sub

enter image description here


2
最好的方法是根据所需精度将变量声明为SingleDouble。数据类型Single使用4个字节,范围为-3.402823E38至1.401298E45。Double使用8个字节。
您可以按以下方式声明:
Dim decAsdf as Single

或者

Dim decAsdf as Double

这里有一个示例,它显示了一个带有变量计算后的值的消息框。您只需要将其放入模块并运行即可。
Sub doubleDataTypeExample()
Dim doubleTest As Double


doubleTest = 0.0000045 * 0.005 * 0.01

MsgBox "doubleTest = " & doubleTest
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接