VB6 处理大整数时出现溢出错误

22

我正在试图设置一个整数值,代码如下:

Dim intID as integer
intID = x * 10000

x 小于等于 3 时,这个代码工作正常。但是当 x 等于 4 时,就会出现以下错误:

运行时错误 6
溢出

我不明白为什么会这样。我可以直接将 intID 设置成 40000 而没有任何问题,所以它显然能够存储大数字。

图片描述

4个回答

41

由于vb6整数是有符号16位数字,因此无法将其设置为40000,最大值为+32767。

Long 是32位类型。

但是需要注意的是,如果您执行以下操作:

Dim lngID As Long
lngID = 4 * 10000

由于字面值默认为整数,因此您仍将遇到溢出问题,要纠正这个问题,只需使用 & 将1明确声明为 long 类型或使用 CLng() 进行强制转换即可:

Dim lngID As Long
lngID = 4 * 10000&
lngID = 4 * CLng(10000)

更新:

在此输入图片描述


3
在vb6中,Dim intID as integer: intID = 40000每次都会出现错误100%。 - Alex K.
1
因为 3 * 10000 可以放在一个整数中(它小于32767),而 4 * 10000 则不能。 - Alex K.
@Urbycoz,你的绝大多数问题都与VB.NET有关。为了避免任何疑问,你能确认你是否确实在VB6中看到了这种行为吗? - AakashM
是的,肯定是VB6。我会发布一张截图。 - Urbycoz
1
@Alex- 你说得对。现在它对我来说的确是这样的行为。不确定发生了什么变化。感谢你的帮助! - Urbycoz

11

在VB6中,整数类型(Integer)表示范围为-32768到32767的整数。

对于这里的代码,最好使用 Long 类型。


1
在VB中,整数变量的范围是-32,768到32,767。如果您的程序中任何变量的值超过了这个范围,请声明为长整型。这样,如果您的计数超过32767,程序就不会出现任何错误。
Dim lngid AS long

1
在VB中,整数变量的范围为-32,768到32,767。如果您的程序中任何变量值超出该范围,您必须声明数据类型为Long而不是Integer。
Dim intID as integer
intID = x * 10000

Dim lngID AS Long

lngID = x * CLng(10000)
' if 10000
' whatever you want to be

1
请解释你的答案。你只是发布了代码。 - Rahul Vishwakarma
2
在VB中,整数变量的范围是-32,768到32,767。如果您的程序中任何变量的值超过了这个范围,您必须声明数据类型为Long而不是Integer。谢谢。 - Uttam Kumar Roy
2
嗨,@Always Beginner,欢迎来到 Stack Overflow。你是对的,解决这个问题的正确方法是使用 long 而不是 int。感谢你提供这个答案。 - Contango

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接