Débordement en ASP Classique
Je me demandais si quelqu'un pouvait m'aider, je suis allé à l'aveugle à ce que je crois est une simple cause d'une simple erreur.
J'ai ce code:
doRound1(x1)
denom1 = 5
y1 = denom1 - x1 mod denom1
if y1 <> denom1 then
x1= x1+y1
end if
doRound1=x1
End function
'theCalc = 20488888888.684
theCalc = cDbl(11111111111) * 1.844
doRound1(theCalc)
J'obtiens cette erreur
Microsoft VBScript runtime error '800a0006'
Overflow: 'x1'
Causés par cette ligne dans le code ci-dessus:
y1 = denom1 - x1 mod denom1
Des idées? Comme je l'ai dit, je suis allé à l'aveugle ce h
Se pourrait-il que x1 est un vaule trop grand pour un Int/Long?
OriginalL'auteur | 2009-09-16
Vous devez vous connecter pour publier un commentaire.
La réponse semble être à PRB: "Dépassement" avec la Division entière et Opérateur MOD:
La réponse y est disponible ainsi:
Aussi, il serait préférable de modifier le code VBScript car c'est un classique ASP question pas une VB6 question. +1 si
OriginalL'auteur Grant Wagner
Je crois que lorsque vous n'avez pas spécifiquement de définir les valeurs, ASP Classique suppose une valeur numérique à un int (qui est le seul à 32767). Essayer de forcer vos valeurs de longs
Note: je n'ai pas réellement testé.
Ross: x1 = CLng(x1) provoque
Overflow: 'cLng'
En fait, ceux-ci devraient probablement être Double. Cependant, je soupçonne que vous avez le droit de répondre autrement. Je recommande double Longs en raison de la en VBScript encore casquettes à 2B; aussi OP entrée semble être un double sur la base des commentaires dans le post.
N'aide pas l'OP.
theCalc = 20488888888.684
puiscDbl(theCalc) mod cDbl(5)
provoque toujoursOverflow: 'cDbl(...)'
VBScript a ses limites ... mais oui, CDbl a plus de sens.
OriginalL'auteur C. Ross