2011-05-05 31 views
18

Estoy tratando de establecer un valor entero como tal:de error de desbordamiento de VB6 con grandes números enteros

Dim intID as integer 
intID = x * 10000 

Esto funciona bien cuando x es 3 o menos. Pero cuando x es 4, esto me da el error:

run-time error 6 Overflow

No entiendo por qué es. Puedo configurar intID a 40000 directamente sin ningún problema, por lo que es obviamente capaz de almacenar grandes cantidades.

enter image description here

Respuesta

32

Usted * No se puede establecer un número entero de VB6 a 40.000, ya que se firmaron los números de 16 bits de modo 32.767 es el máximo.

Long es el tipo de 32 bits.

Sin embargo, como una advertencia, si tuviera que:

Dim lngID As Long 
lngID = 4 * 10000 

Usted todavía obtener un desbordamiento por defecto números literales a entero, para corregir eso simplemente escriba un mayor tiempo con & o emitir un mayor tiempo utilizando CLng():

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

actualización:

enter image description here

+0

Pero, ¿por qué no consigo un error con esto: IntID = 40000 – Urbycoz

+2

en VB 6 ** **, 'Dim IntID como entero: IntID = 40000' se Error 100% del tiempo –

+1

porque' 3 * 10000' encaja en un entero (es <32767), '4 * 10000' no –

9

en VB6, el tipo entero es un número entero que va de -32768 a 32767.

Usted sería mejor usar el tipo Long aquí.

0

En VB El rango de variables enteras es -32,768 a 32,767 Si cualquier valor de variable es más que este rango en su programa, debe declarar el tipo de datos Long en lugar de Integer.

Dim intID as integer 
intID = x * 10000 

Dim lngID AS Long 

lngID = x * CLng(10000) 
' if 10000 
' whatever you want to be 
+1

Por favor explique su respuesta. Usted acaba de publicar el código. –

+1

En VB El rango de variables enteras es -32,768 a 32,767 Si cualquier valor de variable es mayor que este rango en su programa, debe declarar el tipo de datos Long en lugar de Integer. Gracias. –

+1

Hola @Siempre principiante, bienvenido a Stack Overflow. Tienes razón, la forma correcta de resolver esto es usar un largo en lugar de un int. Gracias por brindar esta respuesta. – Contango