Ошибка переполнения VB6 с большими целыми числами - PullRequest
20 голосов
/ 05 мая 2011

Я пытаюсь установить целочисленное значение следующим образом:

Dim intID as integer
intID = x * 10000

Это работает нормально, когда x равно 3 или меньше.Но когда x равно 4, это дает мне ошибку:

ошибка времени выполнения 6 Переполнение

Я не понимаю, почему это так.Я могу установить intID на 40000 напрямую без каких-либо проблем, поэтому он, очевидно, способен хранить большие числа.

enter image description here

Ответы [ 3 ]

37 голосов
/ 05 мая 2011

Вы не можете установить целое число vb6 равным 40000, так как они имеют 16-битные числа со знаком, поэтому максимальное значение равно +32767.

Long - это 32-битный тип.

Однако, как предостережение, если бы вы были:

Dim lngID As Long
lngID = 4 * 10000

Вы по-прежнему получите переполнение, поскольку по умолчанию литеральные числа равны Integer, чтобы исправить это, просто наберите один из них длиннее с & или приведите его так же долго, используя CLng():

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

Обновление

enter image description here

10 голосов
/ 05 мая 2011

в VB6, тип Integer представляет собой целое число в диапазоне от -32768 до 32767.

Здесь лучше всего использовать тип Long.

0 голосов
/ 04 марта 2015

В диапазоне переменных VB Integer от -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
...