VBA如何声明为十进制

时间:2015-06-18 13:57:08

标签: excel excel-vba excel-2007 vba

我在VBA中优化了一个没有声明数据类型的宏,因此编译器将所有内容都作为变量进行了笨拙的处理。我处理科学测量,所以我需要精确度。 我如何声明" Dim decAsdf为Decimal" (不是那样,但正确的方式)?

3 个答案:

答案 0 :(得分:16)

您无法将变量声明为Decimal - 您必须使用Variant(您可以使用CDec使用Decimal类型填充它。)< / p>

答案 1 :(得分: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

答案 2 :(得分:0)

要将变量声明为Decimal,请先将其声明为Variant,然后用Decimal转换为CDec。在监视窗口中,类型为Variant/Decimal

enter image description here

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

enter image description here