2012-01-23 11 views
15

Sono nuovo di zecca per la programmazione e sto avendo qualche problema con l'errore di overflow di Cint. Ogni volta che il valore raggiunge 100.000+ ottengo un errore di overflow Cint. Questo è stato un esercizio di esercitazione nella mia introduzione alla classe di programmazione. Per quanto posso vedere, l'ho codificato esattamente come è stato fatto nella pratica, ma la pratica mostra l'utilizzo di valori alti fino a 300.000. Qualcuno può forse spiegare cosa potrei fare di sbagliato?Errore di overflow Cint quando il valore supera 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> 

risposta

31

CInt può gestire tra -32.768 e 32.767.

Utilizzare CLng anziché CInt.

MSDN Reference

+2

Per riferimento: [Tipi di dati VBScript] (http://msdn.microsoft.com/en-us/library/9e7a57cf%28VS.84%29.aspx) –

1

Conversione dei dati di stringa di numeri interi può essere realizzato utilizzando CInt() CLng() o CDbl(). È importante ricordare i limiti di dimensione di questi tipi di dati. Diversi linguaggi di programmazione hanno limiti diversi.
Here is a link to VBScript Data Types.

I numeri interi possono gestire numeri interi da -32.768 a 32.767. Long può gestire numeri interi da -2.147.483.648 a 2.147.483.647. Il doppio può gestire numeri fino a 1.79769313486232E + 308, (Questo è un numero maggiore del numero di atomi nel Sole, che è 1.19 ottodecillione.) Sono anche doppia precisione in virgola mobile; ciò significa che un doppio può anche gestire punti decimali estremamente precisi.

grandtotal = cdbl(totalshift1) + totalshift2 + totalshift3 

Ciò eliminerà il problema di trabocco. Non gestirà l'errore se un utente inserisce un numero diverso, ma questo è un altro argomento.

+0

Ciò non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post - puoi sempre commentare i tuoi post, e una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) essere in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment). – emmanuel

+0

Questo risponde completamente alla domanda. Ho scritto uno script che, tra le altre cose, esegue la scansione attraverso la nostra intranet e calcola la RAM su macchine di dominio. Il mio primo tentativo è stato CInt. Ciò ha causato un overflow. Poi ho trovato questa risposta da Romeo e ho provato CLng. Anche questo è stato immediatamente traboccato. Il prossimo passo di dati da lungo è il doppio, quindi ho provato CDbl e funziona. È una risposta migliore alla domanda rispetto a quella data, quindi nella valutazione della mia risposta non sei corretto. –

+0

OK. Grazie per l'aiuto. –

Problemi correlati