VB6 Décimal en Degré Minute Seconde

Résolu
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Salut.... J'ai encore un problème avec mes Degré Minute Seconde

L'utilisation de Left Right et Mid fonctionne très bien... mais il me manque de l'information sur les Radiant de VB... Je ne m'y connait pas beaucoup en radiant...

Je m'explique...

J'ai un text box ayant la valeur suivante: 52,2541 (en degré décimaux)

Je veux le mettre en Degré Minute Seconde

donc je fais Degré + Minute/60 + Seconde / 3600 mais ce ne me donne pas la bonne réponse....

La bonne réponse = 52 Degré 15 Minutes14 Secondes

Mais ca me donne 52 Degré 91 Minutes13 Secondes

Bon je sais que 91 Minute ne se peux pas mais 91 minutes donne 53 Degrés 31 Minutes 13 Seconde...

Bref comment je peux faire pour régler ce problème ????

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
je reprends la méthode standard

avec un exemple:







txt2Distance / txt3Distance 1000 / 427 2.341920375

aTan1 = 1.167232882

aTan2 = 66.87751783



Degres Int(aTan2) 66

dbFixInt dbFixInt - Degres 0.87751783

dbFixInt dbFixInt * 60 52.65106992

Minutes Int(dbFixInt) 52

dbFixInt dbFixInt - Minutes 0.65106992

dbFixInt dbFixInt * 60 39.0641952


Secondes Int(dbFixInt) 39




Daniel
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
bon je vais être sympa











Dim n As Double

Dim x As Date



n = 52.253888



x = (n - Fix(n)) / 24



MsgBox "Degrés...." & Int(n)

MsgBox "Minutes..." & Minute(x)

MsgBox "Secondes.." & Second(x)


Daniel
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Salut merci pour ta sympathie....

Mais j'avais essayé ca le Int et le Fix mais je m'y perds complètement...

Je ne saisi pas où mettre ce code
MsgBox "Degrés...." & Int(n)
MsgBox "Minutes..." & Minute(x)
MsgBox "Secondes.." & Second(x)

Moi je fais apparaître la réponse dans un textbox et j'ai essayé de mettre le code à différent endroit mais ca ne fonctionne jamais....

Voici mon code... Dans le code je n'ai pas mis le code que j'ai mis en gras plus haut... J'ai mit le code que tu m'as donné dans ton exemple mais modifier pour mon programme
(Dim n As Double, x As Date
n = 52.253888
x = (n - Fix(n)) / 24)

Private Sub cmdCalcul_Click()
Dim aTan1 As String, aTan2 As String
Dim Degre As Integer, Minute As Integer, Seconde As Integer
Dim intLongueur As Integer, strLongueur As String
Dim strSupression As String
Dim dbFixInt As Double, DateDMS As Date


If txt2Distance <> "" And txt3Distance <> "" Then
aTan1 = Atn(txt2Distance / txt3Distance)
aTan2 = aTan1 * (180 / 3.14159265358979)

'Pour supprimer les déciamux pour avoir que xx,xxxxx
strSupression = Left(aTan2, 7)


txtTempo1.Text = strSupression

'Pour savoir la nombre de caractère du txtTempo1.text
intLongueur = Len(Supression)

dbFixInt = txtTempo1.Text 'Variable n d ans ton exemple
DateDMS = (dbFixInt - Fix(dbFixInt)) / 24 'Variable x dans ton exemple

If intLongueur = 7 Then 'Le If n'est pas utilise pour le moment mais sera utilisé ultérieurement
Degre = Left(txtTempo1.Text, 2)
Minute = Mid(txtTempo1.Text, 4, 2)
Seconde = Right(txtTempo1.Text, 2)
'Le code suivant n'est aps utile pour le moment mais ne nuit pas au fonctionnement
Else
Degre = Left(txtTempo1.Text, 3)
Minute = Mid(txtTempo1.Text, 5, 2)
Seconde = Right(txtTempo1.Text, 2)
End If

txtAngleBasResultat.Text = Degre + Minute / 60 + Seconde / 3600

End If

Si tu as encore la patience... j'attends de tes nouvelles...

merci d'avance
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
je suis en train de regarder:



plusieurs remarques:

- il vaut mieux travailler avec des numériques plutôt que des String

ça évite des conversions



Dim aTan1 As Double, aTan2 As Double

Dim strSupression As Double

<strike> Dim strLongueur As String</strike> ??? pas utilisé



- Troncation

strSupression = Left$(aTan2, 7)

txtTempo1.Text = strSupression

intLongueur = Len(strSupression) 'ce sera forcément 7



à remplacer par

strSupression = Round(aTan2, 4) 'pour avoir 4 chiffres décimaux


intLongueur = Len(txtTempo1.Text)



- Les calculs sont faux


pour transformer les degrés décimaux en degrés, minutes, secondes



66.8775 --> 66 degrés

0.8775 * 60 = 52.65 --> 52 Minutes

0.65 * 60 = 39 Secondes

soit résultat = 66.5239



- bon j'ai pas fini mais ça te donne une idée

la méthode avec date était une méthode originale pour faire faire les conversions

par VB mais c'est pas la seule




Daniel
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
ce qui donne pour l'instant:









Private Sub cmdCalcul_Click()

Dim aTan1 As Double

Dim aTan2 As Double

Dim Degres As Integer

Dim Minutes As Integer

Dim Secondes As Integer

' Dim intLongueur As Integer

' Dim strSupression As Double

Dim dbFixInt As Double

Dim DateDMS As Date



If txt2Distance <> "" And txt3Distance <> "" Then

aTan1 = Atn(txt2Distance / txt3Distance)

aTan2 = aTan1 * (180 / 3.14159265358979)



' est ce bien nécessaire de tronquer ?

' strSupression = Round(aTan2, 4)

' txtTempo1.Text = strSupression

' dbFixInt = strSupression



' pourquoi pas prendre directement aTan2
txtTempo1.Text = aTan2

dbFixInt = aTan2



DateDMS = (dbFixInt - Fix(dbFixInt)) / 24



Degres = Int(dbFixInt)

Minutes = Minute(DateDMS)

Secondes = Second(DateDMS)



txtAngleBasResultat.Text = Degres + Minutes / 100 + Secondes / 10000



End If



End Sub


Daniel
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Merci Mille fois

et merci de ta patience...

A+