2012-01-23 8 views
15

Soy nuevo en la programación y tengo algunos problemas con el error de desbordamiento de Cint. Cada vez que el valor alcanza 100.000+ obtengo un error de desbordamiento de Cint. Este fue un ejercicio de práctica en mi introducción a la clase de programación. Por lo que puedo ver, lo codifiqué exactamente como se hizo en la práctica, pero la práctica muestra el uso de valores tan altos como 300,000. ¿Alguien puede explicar lo que podría estar haciendo mal?Error de desbordamiento de Cint cuando el valor excede 100.000+

<script language="VBscript"> 
Option Explicit 
DIM numberofshifts, totalshift1, totalshift2, _ 
    totalshift3, grandtotal, shiftaverage 
numberofshifts=3 
totalshift1 = Inputbox("How many widgets during the first shift") 
totalshift2 = Inputbox("How many widgets during the second shift") 
totalshift3 = Inputbox("How many widgets during the third shift") 
grandtotal = cint(totalshift1) + totalshift2 + totalshift3 
shiftaverage = grandtotal/numberofshifts 
Document.write "The Total of the Three Shifts is " & grandtotal 
Document.write "<br>The Average of the Three Shifts is " & shiftaverage 
</script> 

Respuesta

31

CInt puede manejar betweeen 32.768 y 32.767.

Utilice CLng en lugar de CInt.

MSDN Reference

+2

Para referencia: [Tipos de datos de VBScript] (http://msdn.microsoft.com/en-us/library/9e7a57cf%28VS.84%29.aspx) –

1

la conversión de datos de cadena a enteros se puede realizar mediante el uso de CInt() CLng() o CDbl(). Es importante recordar las limitaciones de tamaño de estos tipos de datos. Los diferentes lenguajes de programación tienen diferentes limitaciones.
Here is a link to VBScript Data Types.

Los enteros pueden manejar enteros de -32,768 a 32,767. Long puede manejar enteros de -2,147,483,648 a 2,147,483,647. Los dobles pueden manejar números de hasta 1.79769313486232E + 308, (Eso es un número mayor que el número de átomos en el Sol, que es 1.19 octodecillones). También tienen una precisión de coma flotante doble; lo que significa que un doble también puede manejar puntos decimales extremadamente precisos.

grandtotal = cdbl(totalshift1) + totalshift2 + totalshift3 

Esto eliminará el problema de desbordamiento. No manejará el error si un usuario ingresa un número no, pero ese es otro tema.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). – emmanuel

+0

Esto responde la pregunta completamente. Escribí un script que, entre otras cosas, rastrea a través de nuestra intranet y calcula la RAM en máquinas de dominio. Mi primer intento fue CInt. Eso causó un desbordamiento. Luego encontré esta respuesta de Romeo y probé CLng. Eso también se desbordó inmediatamente. El siguiente paso de datos de largo es el doble, así que probé CDbl y funciona. Es una respuesta mejor a la pregunta que la dada, por lo que es incorrecta en su evaluación de mi respuesta. –

+0

OK. Gracias por tu ayuda. –

Cuestiones relacionadas