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

18

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

Dim intID as integer
intID = x * 10000

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

  

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

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

    

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

3 ответа

34

Вы не можете установить целое число 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 Целочисленный диапазон переменных -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