marinmarais
Messages postés104Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention16 juillet 2010
-
5 avril 2007 à 17:05
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
6 avril 2007 à 00:18
Bonjour a tous et a toutes,
(pardonnez-moi l'absence d'accents mais mon clavier en est depourvu...)
J'ai un petit souci d'overflow sur une variable integer et je ne comprends pas d'ou ca peut venir. Malgre une recherche sur les archives de ce forum, je n'ai pas trouve la solution a mon probleme :
Dans un module, je declare :
> Public nbre_mes_tot As Integer
Et dans ma form, j'ai :
> ...
> Dim nn As Integer
> ...
> nbre_mes_tot = 2880
> ...
> nn = 12 * (nbre_mes_tot + 1)
Et la, c'est le drame, overflow...
Pourtant, nn, devant etre egal a 34572, est bien inferieur a la limite des variables integer (+/- 2147483647)...
J'imagine que la solution est tres simple mais la, je ne vois pas :o(
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 avril 2007 à 17:20
Salut,
NON NON, les limites du type Integer en VB6 sont de - 32 768 à 32 767
Les limites que tu donnes sont celle du type Long
@+: Ju£i?n Pensez: Réponse acceptée
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 5 avril 2007 à 17:36
Violent Ken
lol, jrivet a été plus rapide ;)
Mais sinon, il existe des fois des bugs plus bizarres, exemple :
Private Sub Command1_Click()
Dim l As Currency
l = 8000000 * 8000000
End Sub<hr />
Private Sub Command2_Click()
Dim l As Currency
l = 8000000
l = l * 8000000
End Sub ,
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 5 avril 2007 à 20:52
Normal Violent ken.
- Toute constante numérique non typée est considérée comme un long si elle n'est pas décimale.
- Le résultat d'une opération sera du type du premier opérandeavant d'etre ensuite converti dans le type de la variable résultat.
Prenont le cas de l (currency) = 8000000 (long) * 8000000 (long)
Les constantes sont non typées et non décimales donc considérées comme du Long. Le premier opérande est donc du type Long, le résultat de l'opération sera de type Long, converti ensuite en Currency. Or 8 000 000 * 8 000 000 dépasse la capacité d'un long donc tu as une erreur de capacité.
Prenont le cas de l = l * 8000000 avec l=8000000. L'opération revient au même sauf qu'ici le premier opérande (l) est de type Currency. Donc le résultat sera de type Currency et 8000000*8000000 rentre dans un Currency
Petit test :
Reprend le premier cas mais en lui spécifiant que la première constante est de type Double : l = 8000000 # * 8000000
Ici ça passe, le premier opérande est un double, le résultat sera donc tout d'abords un double avant convertion et 8000000*8000000 rentre dans un double.
---- Sevyc64 (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 6 avril 2007 à 00:18
t' es pas le seul Violent Ken
Bien que je n' ai jamais fait le (1) mais plutôt le (2);
suite aux explications de Casy, je continuerai à faire comme avant.