violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
7 mars 2007 à 20:31
us_30 -
18 nov. 2007 à 22:38
Violent Ken
Bonjour, j'ai un problème à priori trivial à résoudre, mais je ne vois pas trop la solution...
Voici le code en question :
Option Explicit
Private Sub Form_Load()
Dim i As Currency
For i = 0 To 400000 Step 2000
Stop
Next i
End Sub ,
----
By Renfield
Je lance, rien ne se passe...
Je change le 400000 en 40000 ou en 4000000 et çà marche...
Le problème se situe en fait au niveau du type Currency de i (car pas de problème en long).
Sans doutes un bug banal, quelqu'un aurait-il la solution ??
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 7 mars 2007 à 20:44
Qu'est-ce qui marche et qui marche pas.
Avec ton programme, s'il doit marcher correctement, en fait il ne marchera pas, puisque dès la première itération , tu l'arrete avec l'instruction Stop
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 mars 2007 à 20:59
Je suppose que Vilent ne s'est pas arrêté ) celà, Casy...
Violent Ken,
Alors là que oui, que tu as excité ma curiosité !
Je n'ai pas la réponse logique mais voilà où nous en sommes :
la limite semble être, à un 10/1000 près : :214748.364
Dieu seul sait pourquoi !!!
Private Sub Command2_Click()
Dim i As Currency
For i = 0 To 214748.364 Step 200000 ' ou step ce que tu veux, celà ne changera rien...
MsgBox i
Next i
ens sub
J'essaye de comprendre (insomnies en perspectives, c'est certain...)
End Sub
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 7 mars 2007 à 21:09
en effet c'est surprenant
la limite exacte c'est 214748.3647
alors que justement que la limite d'un Long est 2148483647 et que le Currency travaille avec 4 décimales
c'est la façon de travailler de Vb même si on met les données en Currency (début, fin et step)
Daniel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 7 mars 2007 à 21:20
je voulais dire 2147483647 (2^31)
c'est quand même lié à un Long parce ça remarche à parir de 429496.7296
donc de 214748.3648 à 429496.7295 ça marche pas ????
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 7 mars 2007 à 22:02
Bonsoir jmfmarques,
apparement j' ai pas compris au premier abord...!
la question serait donc pourquoi le 3ième passage
alors que la limite est dépassée...
Peut être parce que tant que la lmite n' est pas atteinte
au deuxième passage, il franchit un pas de plus.
ça n' explique toujours pas pourquoi...
j' attenderais avec vous une réponse convaicante...
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 7 mars 2007 à 22:05
Violent Ken
Oups, mes excuses, je répond seulement après 9-10 posts...
J'avais aussi trouvé la limite 214748(sans les décimales), et j'ai remarqué le début de 2^31... donc je me suis dit que c'était lié au type, et c'est le cas puisqu'avec un Long pas de problèmes...
Mais franchement, je coince... j'ai recherché sur le Net rapidement, rien trouvé... et malheureusement, i contient un nombre dépassant les 2.10^11 dans mon programme, donc stockage obligatoire dans un Currency :(
(je ne peux utiliser un autre type)
Je vais essayer de faire quelques autres tests pour comprendre, et en tout cas déjà merci pour votre aide^^
@+
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 mars 2007 à 22:12
Pour chaibat05 :
Ma question est pourquoi , avec i en currency, on est limité à (environ... oublions les décimales...) 214748 alors que le type currency gère jusqu'à 922,337,203,685,477.5807. ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 7 mars 2007 à 22:30
chez moi c' est limité à 999 999 999
je me souviens avoir rencontré le même
problème dans un prog de conversion de
chiffres en lettres...(pas posible de gérer le milliard)
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 7 mars 2007 à 22:50
Violent Ken
En fait nous ne sommes pas limité à 214748, mais ce nombre est la "transition" entre une zone de valeurs qui marchent et une zone de valeurs qui ne fonctionnent pas.
Par exemple,
Option Explicit
Private Sub Form_Load()
Dim i As Currency
For i = 0 To 40000000 Step 2000
Stop
Next i
End Sub ,
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 mars 2007 à 23:00
salut,
euh... aucune info mais une idée
gobillot a mis :
déconne à partir de 214748.3648 jusqu'à 429496.7295
il y a un donc un équart de (2^31)-1
perso çà me fait penser à un type signé non?
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Private Sub Form_Load()
Dim i As Currency
For i = 0 To 200000 Step 20000
List1.AddItem i
Next
End Sub
La liste va de 0 à 420000
Faites la même chose avec "dim i as long" et cela est correct
Pour Violent _Ken : et si tu essayais avec les Long Integer en convertissant ton currency en 2 valeurs sur 32 bits ( prends modèle sur la routine DirectReadWrite de l'accès direct aux secteurs disque où on convertit le numéro de secteur en 2 valeurs 32 bits) : il faudrait peut-être utiliser une double boucle For imbriquée ( une pour les 32 poids forts et une pour les 32 poids faibles)
Sans aucune certitude