如何在VBA中处理10E22这样的非常大的数字?
dim a, b, c as double
a = 1234567890123456789012
c = a / bit
b = a - (c + 1) * bit
我得到b = 0
按照建议,我更改了
dim a as double, b as double, c as double
,但它仍然关闭:
dim a as double, b as double, c as double
a = 1234567890123456789012
c = a / bit
b = a - (c + 1) * bit
我得到 b = 57344
VBA 中唯一可以处理如此大数字的数据类型是 Decimal,它作为 Variant 的子类型,不能直接声明,而是必须转换为,因此您的解决方案将是:
Dim a As Variant
Dim b As Variant
Dim c As Variant
a = CDec("1234567890123456789012")
c = a / bit
b = a - (c + 1) * bit
请注意,大数字也必须写为 String,否则它会自动转换为 Double,并且在将该值转换为 Decimal 之前会丢失精度。
当你写下这样的声明时:
dim a, b, c as double
只有
c
才是 Double
类型,所有其他变量都将是 Variant
,因为您没有显式设置类型。要设置类型,您可以执行以下两项操作之一
Dim a as Double, b as Double, c as Double
或者,更传统的方法(在我看来),是这样的:
Dim a as Double
Dim b as Double
Dim c as Double
有关 vba 数据类型的更多信息,这里有一篇来自 microsoft 的精彩文章 (link)