【问题标题】:VB6 overflow error with large integersVB6 大整数溢出错误
【发布时间】:2011-05-05 09:58:25
【问题描述】:

我正在尝试这样设置一个整数值:

Dim intID as integer
intID = x * 10000

x 为 3 或更少时,这可以正常工作。但是当x 为 4 时,这给了我错误:

运行时错误 6 溢出

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

【问题讨论】:

    标签: vb6 integer overflow


    【解决方案1】:

    您*不能将 vb6 整数设置为 40000,因为它们是有符号的 16 位数字,因此 +32767 是最大值。

    Long 是 32 位类型。

    但需要注意的是,如果您要:

    Dim lngID As Long
    lngID = 4 * 10000
    

    您仍然会出现溢出,因为文字数字默认为 Integer,要纠正这种情况,只需使用 & 键入一个 long 或使用 CLng() 投射一个 as long:

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

    更新

    【讨论】:

    • 在 vb6 中,Dim intID as integer: intID = 40000 100% 的时间会出错
    • 因为3 * 10000 适合整数(其4 * 10000 不适合
    • @Urbycoz 你的大部分问题都是关于 VB.NET 的。为避免任何疑问,您能否确认您确实在 VB6 中看到了这种行为?
    • 是的,绝对是VB6。我会发布截图。
    • @Alex- 你是对的。它的行为就像你现在对我说的那样。不确定发生了什么变化。感谢您的帮助!
    【解决方案2】:

    在 VB6 中,Integer 类型是一个整数,范围从 -32768 到 32767。

    您最好在此处使用Long 类型。

    【讨论】:

      【解决方案3】:

      在 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
      

      【讨论】:

      • 请解释你的答案。您只是发布了代码。
      • 在 VB 中整数变量范围是 -32,768 到 32,767 如果您的程序中有任何变量值超过此范围,则必须声明数据类型 Long 而不是 Integer。谢谢。
      • 嗨 @Always 初学者,欢迎来到 Stack Overflow。你是对的,解决这个问题的正确方法是使用 long 而不是 int。感谢您提供此答案。
      【解决方案4】:

      在 VB 中,整数变量范围是 -32,768 到 32,767,如果您的程序中任何变量值超过此范围。 如果您的计数超过 32767,请在 long 中声明变量,那么您的程序中不会出现任何错误。

      Dim lngid AS long
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        相关资源
        最近更新 更多