Prob de depassement de capacité ...

Messages postés
29
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
30 mai 2004
- - Dernière réponse : Vb Lover
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
- 12 mai 2004 à 22:09
bon j'ai un souci lors de l'execution de mon appli
en debogage il me met depassement de capacité a la ligne :

Temp = Statjour(i).Statping * 100 / Nbenregistrement


temp est un double initiliser a 0
Statjour(i).Statping est un integer qui vaut 764 lors de premier passage
Nbenregistrement est aussi un integer qui vaut 764 lors de premier passage

donc la je comprend pas ...
Afficher la suite 

6 réponses

Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
0
Merci
T'es bien sur que Nbenregistrement ne vaut jamais 0 ?

++
moustachu
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
1
0
Merci
Nbenregistrement à 0 il aurait un divide by 0 comme erreur.
L'erreur se produit même si on fais dans la fenêtre d'exécution de VB 764 * 100 / 764 en dur.

Tu modifies ton calcul par la ligne suivante pour résoudre ton soucis

Temp = Statjour(i).Statping * (100 / Nbenregistrement)
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
1
0
Merci
Je ne sais pas pourquoi, mais je sens gros comme un camion que le fait de n'avoir que des Integer fait que le compilateur VB convertit les résultats dans un mauvais type de données.
Messages postés
29
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
30 mai 2004
0
Merci
j' ai passer Statjour(i).Statping en double et ca marche
merci qd meme ;-)
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
3
0
Merci
ah ah ah. C'est normal, c'est effectivement le fait d'avoir des Integer qui donne les erreurs.

Soit S = Statjour(i).Statping
N = Nbenregistrement

quand tu écris : S * 100 / N, le compilateur prend les arguments dans l'ordre, et travaille dans leur type.

essaie les différentes expressions dans VB :

msgbox 764 * 100 / 764
msgbox 764 * 100# / 764
msgbox 764 * (100 / 764)

etc etc ...

t'as compris ???

VB Lover
Messages postés
221
Date d'inscription
vendredi 30 novembre 2001
Statut
Membre
Dernière intervention
13 février 2010
3
0
Merci
je m'explique :

pour "764*100/764", le compilateur prend la première expression, qui est composée de 2 entiers. Il va donc traiter le résultat comme un entier. Mais 76400 est trop grand ! -> overflow

pour 764*100#/764, la première expression contient un entier et un réel, donc le calcul sera traité dans les réels (prend le plus "grand" des 2 types). et pas de problème.

pour 764*(100/764), le premier calcul est 100/764, qui va être convertit automatiquement en réel car le résultat n'est pas entier (mais il "reste" dans les bornes des entiers), et puis le résultat est tout petit, donc multiplié par 764, y'a pas de problème !

VB Lover