cs_JeffC1977
Messages postés928Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention23 septembre 2023
-
12 déc. 2005 à 18:43
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
12 déc. 2005 à 22:20
Salut...
J'ai un problème avec un Soustraction... Bon je sais que je ne devrais pas avoiur de problème mais ca ne fonctionne pas...
J'utilise 4 variables pour faire une modification en appuyant sur un optButton.
Voici le code et j'explique mon problème avec le code...
Private Sub optDecimal1_Click()
Dim dbConvertOpt As Double
Dim DegreOpt As Integer, MinuteOpt As Integer, SecondeOpt As Integer
dbConvertOpt = CDbl(txt1Gisement.Text)
DegreOpt = Int(txt1Gisement) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - DegreOpt dbConvertOpt = dbConvertOpt / 60
MinuteOpt = Int(dbConvertOpt) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - MinuteOpt
dbConvertOpt = dbConvertOpt / 60
SecondeOpt = Int(dbConvertOpt)
Text1.Text = Degres & "°" & Minutes & "'" & Secondes & "''"
End Sub
Mon problème se produit dans le code en gras.
Mon txtGisement.text est égal à "229,0943"
Pourquoi:
La soustraction de dbConvertOpt - DegreOpt (qui est = à 229) donne un résultat de 9,527777777777827E-06 ?????????
Le résultat (la variable dbConvertOpt) devrait être égal à 0,0943
P.S. les variabales que j'utilise sont unique dans le code....
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 déc. 2005 à 19:21
Salut
Ne confonds pas Int et CInt : le résultat n'est pas le même (question d'arrondi)
Dans ta ligne en gras, je pense qu'il faudrait convertir DegreOpt en Double pour rester compatible avec dbConvertOpt :
dbConvertOpt = dbConvertOpt - CBld(DegreOpt)
Pareil dans la ligne suivante. Bien que 60 ne porte pas à confusion, VB6 est très con la dessus :
Ajoute un # après 60 pour lui dire de prendre 60 pour un Double
dbConvertOpt = dbConvertOpt / 60#
etc pour les autres lignes
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_JeffC1977
Messages postés928Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention23 septembre 20234 12 déc. 2005 à 20:28
Salut j'ai essayé ton conseil et ca ne fonctionnepas....
Voici le code modifié
Private Sub optDecimal1_Click()
Dim dbConvertOpt As Double
Dim DegreOpt As Integer, MinuteOpt As Integer, SecondeOpt As Integer
dbConvertOpt = CDbl(txt1Gisement.Text)
DegreOpt = Int(txt1Gisement) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - CDbl(DegreOpt)
dbConvertOpt = dbConvertOpt / 60#
MinuteOpt = Int(dbConvertOpt) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - CDbl(MinuteOpt)
dbConvertOpt = dbConvertOpt / 60#
SecondeOpt = Int(dbConvertOpt)
Text1.Text = DegreOpt & "," & MinuteOpt & SecondeOpt
End Sub
Chose que je ne sais pas c'est que dans le code j'utilise a peu près le même code et ca fonctionne très bien... Voici le code qui fonctionne correctement
'Cest variables sont Private et non Public
Dim Angle As Double
Dim Gisement As Double
Dim aTan1 As Double, aTan2 As Double, Pythagore As Double
Dim aSin1 As Double, aSin2 As Double
Dim Degre As Integer, Minute As Integer, Seconde As Integer
Dim MinuteCalcul As Integer, SecondeCalcul As Integer
Dim intLongueur As Integer
Dim strSupression As Double, strSupression1 As Double
Dim dbConvert As Double
If txt1Distance <> "" And txt1Gisement <> "" And txt3Distance <> "" Then
aSin1 = ASin(txt3Distance.Text / txt1Distance.Text)
aSin2 = aSin1 * (180 / 3.14159265358979)
Angle = 90 - aSin2
Gisement = aSin2 - txt1Gisement.Text
dbConvert = aSin2
Degres = Int(aSin2) 'le Int arrondie la valeur (enlève les décimaux)
dbConvert = dbConvert - Degres
dbConvert = dbConvert * 60
Minutes = Int(dbConvert) 'le Int arrondie la valeur (enlève les décimaux)
dbConvert = dbConvert - Minutes
dbConvert = dbConvert * 60
Secondes = Int(dbConvert)
cs_JeffC1977
Messages postés928Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention23 septembre 20234 12 déc. 2005 à 21:41
Salut Daniel....
Je savais que mon code n'était pas correct mais je voulais savoir pourquoi ma variable affichais une valeur incohérente (pour moi). Pour ce qui est de tes explication, je n'en ai pas tenu compte encore. Je voulais savoir la cause de cela. Dans les messages que tu m'as laissé tu solutionnais mon problème de conversion. Mais la je voulais savoir aujourd'hui, pourquoi ma variable a un nombre "bisare" et pouquoi j'utilise le même code ailleurs dans le programme et que ca fonctionne.
Mais merci encore de ton aide... je vais y tenir compte... aussitot que je réussi à faire afficher un nombre "normale" à ma variable... mais je vais essayer de la mettre en curency et après je suis tes explications...