web-dev-qa-db-fra.com

Erreur de dépassement de capacité lorsque la valeur dépasse 100 000+

Je suis nouveau dans la programmation et je rencontre des problèmes avec l'erreur de débordement de Cint. Chaque fois que la valeur atteint 100 000+, j'obtiens une erreur de débordement de Cint. C'était un exercice d'entraînement dans mon introduction au cours de programmation. Pour autant que je puisse voir, je l'ai codé exactement comme cela a été fait dans la pratique, mais la pratique montre l'utilisation de valeurs aussi élevées que 300 000. Quelqu'un peut-il expliquer ce que je fais de mal?

<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>
19
Tommy Skaggs

CInt peut gérer entre -32 768 et 32 ​​767.

Utilisez CLng au lieu de CInt.

Référence MSDN

37
Romeo

La conversion des données de chaîne en nombres entiers peut être effectuée à l'aide de CInt () CLng () ou CDbl (). Il est important de se rappeler les limites de taille de ces types de données. Différents langages de programmation ont des limitations différentes.
Voici un lien vers les types de données VBScript.

Les entiers peuvent gérer des entiers de -32 768 à 32 767. Long peut gérer des entiers de -2.147.483.648 à 2.147.483.647. Les doubles peuvent gérer des nombres allant jusqu'à 1,79769313486232E + 308, (c'est un nombre plus grand que le nombre d'atomes dans le Soleil, qui est de 1,19 octodécillion.) Ils sont également à double précision en virgule flottante; ce qui signifie qu'un double peut également gérer des décimales extrêmement précises.

grandtotal = cdbl(totalshift1) + totalshift2 + totalshift3 

Cela éliminera le problème de débordement. Il ne gèrera pas l'erreur si un utilisateur entre un non-numéro, mais c'est un autre sujet.

2
Russell S