Ошибка переполнения VB6 с большими целыми числами

19

Я пытаюсь установить целочисленное значение как таковое:

Dim intID as integer
intID = x * 10000

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

run-time error 6 Overflow

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

    
задан Urbycoz 05.05.2011 в 11:58
источник

3 ответа

35

Вы не можете установить целое число 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)

Обновление

    
ответ дан Alex K. 05.05.2011 в 12:05
  • Но почему я не могу получить сообщение об ошибке: intID = 40000 –  Urbycoz 05.05.2011 в 12:10
  • В vb6, Dim intID как целое: intID = 40000 будет ошибочно 100% времени –  Alex K. 05.05.2011 в 12:14
  • Поскольку 3 * 10000 вписывается в целое число (его <32767), 4 * 10000 не –  Alex K. 05.05.2011 в 12:21
  • @ Урбикоз подавляющее большинство ваших вопросов касалось VB.NET. Во избежание каких-либо сомнений вы могли бы подтвердить, что определенно видите это поведение в VB6? –  AakashM 05.05.2011 в 12:48
  • @ Алекс. Ты прав. Он ведет себя так, как ты сейчас говоришь. Не уверен, что изменилось. Спасибо за вашу помощь! –  Urbycoz 05.05.2011 в 13:21
10

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

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

    
ответ дан trickwallett 05.05.2011 в 12:06
0

В диапазоне переменных 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
    
ответ дан Uttam Kumar Roy 04.03.2015 в 05:53
  • Пожалуйста, объясните свой ответ. Вы просто разместили код. –  Rahul Vishwakarma 04.03.2015 в 06:04
  • В диапазоне переменных VB Integer -32,768 - 32,767. Если какое-либо значение переменной больше, чем этот диапазон в вашей программе, вы должны объявить тип данных Long вместо Integer.Thanks. –  Uttam Kumar Roy 05.03.2015 в 06:42
  • Привет @ Всегда начинающий, добро пожаловать в переполнение стека. Вы правы, правильный способ решить это - использовать long вместо int. Благодарим вас за предоставленный ответ. –  Contango 08.04.2015 в 17:41