在VBA中处理大数

问题描述 投票:0回答:2

如何在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 numbers double
2个回答
3
投票

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 之前会丢失精度。


2
投票

当你写下这样的声明时:

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)

© www.soinside.com 2019 - 2024. All rights reserved.