web-dev-qa-db-fra.com

Erreur de débordement VB6 avec des entiers de grande taille

J'essaie de définir une valeur entière en tant que telle:

Dim intID as integer
intID = x * 10000

Cela fonctionne bien lorsque x est égal à 3 ou moins. Mais quand x est 4, cela me donne l'erreur:

erreur d'exécution 6 Débordement

Je ne comprends pas pourquoi c'est. Je peux régler intID directement sur 40000 sans aucun problème, il est donc évidemment capable de stocker de grands nombres.

enter image description here

19
Urbycoz

Vous * ne pouvez pas définir un entier vb6 sur 40000 car ils sont signés avec des nombres de 16 bits, ce qui signifie que +32767 est le maximum.

Long est le type 32 bits.

Toutefois, à titre d'avertissement, si vous deviez:

Dim lngID As Long
lngID = 4 * 10000

Vous obtiendrez toujours un débordement car les nombres littéraux sont définis par défaut sur Integer. Pour corriger cela, il suffit de taper un aussi longtemps avec & ou de le convertir aussi longtemps avec CLng():

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

Mettre à jour :

enter image description here

36
Alex K.

dans VB6, le type Integer est un nombre entier compris entre -32768 et 32767. 

Vous feriez mieux d'utiliser le type Long ici.

10
trickwallett

Dans VB, la plage de variables entières est comprise entre -32 768 et 32 ​​767 Si une valeur de variable est supérieure à cette plage dans votre programme, vous devez déclarer le type de données Long au lieu d'Integer.

Dim intID as integer
intID = x * 10000

Dim lngID AS Long

lngID = x * CLng(10000)
' if 10000
' whatever you want to be
0
Uttam Kumar Roy