我在VBA中优化了一个没有声明数据类型的宏,因此编译器将所有内容都作为变量进行了笨拙的处理。我处理科学测量,所以我需要精确度。 我如何声明" Dim decAsdf为Decimal" (不是那样,但正确的方式)?
答案 0 :(得分:16)
您无法将变量声明为Decimal
- 您必须使用Variant
(您可以使用CDec
使用Decimal
类型填充它。)< / p>
答案 1 :(得分:2)
最好的方法是根据您需要的精度将变量声明为Single
或Double
。数据类型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
答案 2 :(得分:0)
要将变量声明为Decimal
,请先将其声明为Variant
,然后用Decimal
转换为CDec
。在监视窗口中,类型为Variant/Decimal
:
Considering that programming floating point arithmetic is not what one has studied during Maths classes at school,应该始终尝试通过尽可能地转换为十进制来避免常见的陷阱。
在下面的示例中,我们看到表达式:
0.1 + 0.11 = 0.21
是True
还是False
,具体取决于收藏品(0.1,0.11)是声明为Double
还是声明为Decimal
:
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