VB6 Calcul simple qui ne fonctionne pas. ???

cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 28 févr. 2006 à 17:56
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 1 mars 2006 à 04:47
Salut.. J'ai un petit problème bête...

Tout les calcul suivant fonctionne très sauf le dernier (VarMile)

Mon programme est un petit logiciel pour faire la conversion de longueur..
Je rentre la valeur 100 dans mon textbox et j'ai le résultat en Pied, chaine, etc...

Le bug est que ma Variable VarMile devrait me donner comme résults la valeur 0.062137119 et ca me donne plutôt le résultat suivant: 6.2137119 ??????

Pourquoi ????

Dim VarMetre As Double
Dim VarPiedAnglais As Double
Dim VarPiedFrancais As Double
Dim VarChaine As Double
Dim VarArpent As Double
Dim VarMile As Double

If cboLongueur.Text = "Mètre" Then
VarPiedAnglais = txtConversion.Text / 0.3048
VarPiedFrancais = txtConversion.Text / 0.3248406
VarChaine = txtConversion.Text / 20.1168
VarArpent = txtConversion.Text / 58.471308
VarMile = txtConversion.Text / 1609.344

merci d'avance

9 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 févr. 2006 à 18:11
Salut
-1- Il vaut mieux convertir explicitement les valeurs des chaines contenues dans les TextBox :
VarPiedAnglais = CDbl( txtConversion.Text) / 0.3048
-2- Une TexBox pouvant contenir des caractères non numériques, il est judicieux d'ajouter un Val qui transformera la chaine en 0 au lieu de générer une erreur de code :
VarPiedAnglais = CDbl(Val(txtConversion.Text)) / 0.3048
-3- Bizarrement, VB reconnait mal le format des valeurs numériques fixes comme ton 0.3048
Comme tu travailles en double, ajoute un # après ton chiffre :
VarPiedAnglais = CDbl(Val(txtConversion.Text)) / 0.3048#

Ca devrait fonctionner.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 févr. 2006 à 18:15
Salut,

Est tu sur que que le resultat ne serait pas plutot 6.2137119E-2

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
28 févr. 2006 à 18:51
Bonjour à vous 2....

Effectivement Julien tu a la bonne réponse.... enfin ca me donne 6.2137119E-2
mais ca ne doit pas me donner ce la... héhéhéhé

Jack j'ai essayé ce que tu m'a suggéré mais ca ne fonctionne pas plus...

Encore une fois toute les réponses sont bonnes à l'exeption de ma variable VarMile...

alors voici les modifications du code...

If cboLongueur.Text = "Mètre" Then
VarPiedAnglais = CDbl(Val(txtConversion.Text)) / 0.3048
VarPiedFrancais = CDbl(Val(txtConversion.Text)) / 0.3248406
VarChaine = CDbl(Val(txtConversion.Text)) / 20.1168
VarArpent = CDbl(Val(txtConversion.Text)) / 58.471308
VarMile = CDbl(Val(txtConversion.Text)) / 1609.344

Mes variables sont toutjours des Double....

P.S. j'ai mis un # après mes chiffres mais aussitôt que je change de ligne le "#" s'efface

merci d'avance
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 févr. 2006 à 19:09
jrivet a raison, ton résultat est bon

c'est au moment de l'affichage que tu choisis le nombre de décimales que tu veux

MsgBox Round(VarMile, 9)


Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
28 févr. 2006 à 19:29
Rebonjour...

Bien il y a quelque chose que je ne saisi pas...

VarMile = CDbl(Val(txtConversion.Text)) / 1609.344

Si je fais sur ma calculatrice

100 (txtConversion) / 1609.344 ca me donne 0,062137119

Dans monprogramme ce donne la Réponse à jrivet

J'ai besoin d'explication.. enfin d'être plus éclairé

merci encore
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 févr. 2006 à 19:47
bonne question !

pourquoi ça affiche parfois en format scientifique et parfois en format normal ?

6,21371192237334E-02

équivallent à:

0.0621371192237334



15 chiffres significatifs, mais 16 chiffres après la virgule

je pense qu'à partir de 16 chiffres décimaux ce sera un Format scientifique

MsgBox Round(VarMile, 15) --> normal

MsgBox Round(VarMile, 16) --> scientifique



je te rassures les 2 sont égaux:

6,21371192237334E-02 = 6,21371192237334 * 10-2

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 févr. 2006 à 20:05
dan l'exemple:

VarMile = Val(txtConversion.Text) / 1609.344



si txtConversion.Text <=160 --> format scientifique

si txtConversion.Text >=161 --> format normal



pour du Single c'est à partir de 8 décimales



et sur ta calculatrice (pour 8 chiffres) essayes de taper:

6.2137119 EXP 2 - =


Daniel
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
1 mars 2006 à 03:32
Rebonjour....

Et bine c'est bien de savoir que les 2 valeurs sont égales... mais le problème c'est que je doit absolument avoir la valeur normal et non scientifique...

Le Bug c'est que je fais un prog. de conversion.... si c'est la valeur scientifique qui aparait..... et bien sa donne à première vue un erreur pour l'utilisateur... :(

J'ai posé une question plsutot dans la journée à propos de la conversion de degré déciamux en Degré Minute Seconde....

Et bien j'ai le même problème....

Degres = Int(txtVertical) 'le Int arrondie la valeur (enlève les décimaux)
dbConvert = (dbConvert - Degres)
dbConvert = dbConvert * 100
dbConvert = Int(dbConvert)
dbConvert = dbConvert / 60
Minutes = Int(dbConvert) 'le Int arrondie la valeur (enlève les décimaux)
dbConvert = dbConvert - Minutes
dbConvert = (dbConvert * 100) / 60

Lorsque je divisi 1 par 60 ca me donne 1,66666666667E-02 et je devrais avoir 0,0166666666667
Le problème est que même si je divise par 100 ca m'indique la même réponse... :(

Comment faire pour solutionner ce problème ????

Merci d'avance
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
1 mars 2006 à 04:47
ne mélangeons pas tout.



1) pour la conversion, tu affiches bien le résultat quelque part, non ?

VarMile = Val(txtConversion.Text) / 1609.344

VarMile c'est un Double codé en binaire, donc il y a pas de format scientifique pour l'instant,

ensuite tu l'affiches avec le nombre de décimales voulues (jusqu'à 15 maximum)

txtResultat = Round(VarMile, 8)



2) pour l'autre problème, je penses que ç'est plutôt des multiplications:
0.019722222 * 60 = 1.183333333

0.183333333 * 60 = 11

---> 0° 1' 11"


Daniel
0
Rejoignez-nous