Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将变量声明为十进制_Excel_Vba_Excel 2007 - Fatal编程技术网

Excel 将变量声明为十进制

Excel 将变量声明为十进制,excel,vba,excel-2007,Excel,Vba,Excel 2007,我正在VBA中优化一个宏,该宏没有声明任何数据类型,因此编译器笨拙地将所有内容都视为变量。我在处理科学测量,所以我需要精确性 如何将Dim decAsdf声明为Decimal(不是那样,而是正确的方法)?您不能将变量声明为Decimal-您必须使用Variant(您可以使用CDec来填充Decimal类型)。数据类型Single使用4个字节,范围为-3.402823E38到1.401298E45双字节使用8个字节 您可以声明如下: Dim decAsdf as Single 或 下面是一个示例

我正在VBA中优化一个宏,该宏没有声明任何数据类型,因此编译器笨拙地将所有内容都视为变量。我在处理科学测量,所以我需要精确性


如何将Dim decAsdf声明为Decimal(不是那样,而是正确的方法)?

您不能将变量声明为Decimal-您必须使用
Variant
(您可以使用
CDec
来填充
Decimal
类型)。数据类型
Single
使用4个字节,范围为-3.402823E38到1.401298E45<代码>双字节使用8个字节

您可以声明如下:

Dim decAsdf as Single

下面是一个示例,其中显示一个消息框,其中包含计算后的变量值。你所要做的就是把它放在一个模块中并运行它

Sub doubleDataTypeExample()
Dim doubleTest As Double


doubleTest = 0.0000045 * 0.005 * 0.01

MsgBox "doubleTest = " & doubleTest
End Sub

要将变量声明为
十进制
,请首先将其声明为
变量
,然后使用
CDec
转换为
十进制
。监视窗口中的类型应为
Variant/Decimal

,应尽可能转换为十进制,以避免常见的陷阱

在下面的示例中,我们看到表达式:

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

例如:
Dim v:v=CDec(“123456789.123456789”)
那么每个小数点都在不同的行上声明了吗?我不知道你的意思。声明为
Dim
,与任何其他变量类型没有区别。这是否是一个正确的示例:Dim DeceanComp:DeceanComp=CDec(“1234”)是。只是澄清一下——声明和赋值不必在同一行,我只是不能在注释中发布单独的代码行!
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