[..]Tester si une variable est un nombre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[..]Tester si une variable est un nombre

#1

Message par pierrotm777 »

Bonjour,

Ce script calcul la pente d'une route en fonction de données GPS.
Je la calcule ainsi:

Code : Tout sélectionner

$pente = Round((Abs($alt2 - $alt1)/$distance)*100,0);pente calculée en pourcentage
ou $distance = distHaversine($lat1, $lon1, $lat2, $lon2)

la fonction du calcul de la distance (trouvée sur le forum US) est la suivante:
► Afficher le texte
J'essais de tester si une $pente est un nombre ou pas par ce que dans le calcul de la pente, mon résultat est parfois égal à -1.#IND.

J'ai donc testé cette boucle:

Code : Tout sélectionner

            $distance = distHaversine($lat1, $lon1, $lat2, $lon2)
            $pente = Round((Abs($alt2 - $alt1)/$distance)*100,0);pente calculée en pourcentage
            If Number($pente) Then
                GUICtrlSetData($Label9, "Slope: "&$pente)
            Else
                $pente = "??"
                GUICtrlSetData($Label9, "Slope: "&$pente)
            EndIf
Mais cela ne semble pas fonctionner.
Il semblerait que le problème arrive lorsque $alt2=$alt1.
Je ne comprend pas d'où cela peu bien venir.

Merci de votre aide
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#2

Message par jbnh »

-1 est un nombre :| donc que voulez vous savoir réellement. si le résultat est positif ? Dans ce cas regardez si il est < que 0.

Vu que j'ai pas très bien compris : voici tjrs qqchose qui peux vous aider IsNumber()
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#3

Message par pierrotm777 »

Merci de votre réponse.
Je prend la valeur absolu de $alt2-$alt1, donc -1 n'est pas possible , enfin je crois !

Aprés quelque essais , je constate bien que mon problème existe quand Abs($alt2-$alt1)=0.

Il me faudrait donc tester l'existance de ce 0 puisque :
$pente = Round((0/$distance)*100,0), ça ne doit pas faire grand chose.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#4

Message par pierrotm777 »

Je pense avoir trouvé ma solution en testant si Abs($alt2-$alt1)=0 .

Ce qui me donne :

Code : Tout sélectionner

$distance = distHaversine($lat1, $lon1, $lat2, $lon2)
If Abs($alt2 - $alt1)=0 Then
   $pente = "!!"
Else
   $pente = Round((Abs($alt2 - $alt1)/$distance)*100,0);pente calculée en pourcentage
EndIf
GUICtrlSetData($Label9, "Slope: "&$pente&"%")
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#5

Message par SrBelial »

bon je pense que vous êtes sur la bonne voie, seulement pensez à vous méfier de deux choses :

que se passe t'il si $distance = 0 ? actuellement je pense que ça peut amener à une erreur ....

comment expliquer le résultat négatif ? en effet la valeur absolue de ($alt2 - $alt1) sera toujours positive,
cependant cela n'empêchera pas $pente d'être négatif .... son signe dépend directement de celui de $distance ...
à vous de voir si la fonction distHaversine($lat1, $lon1, $lat2, $lon2) peut vous renvoyer un nombre négatif ...

étant donné que cette fonction m'a tout l'air de fonctionner avec une pointe de trigonométrie, (du cosinus, du sinus, et tout le toutim) ... il y a de fortes chances pour que les résultats puissent être négatifs !!!

=> attention donc lorsque vous faites des calculs à prendre toutes les précautions qui s'imposent
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#6

Message par pierrotm777 »

Effectivement, au fait j'y pense seulement maintenant mais $distance est remis à 0 tous les 100m donc ça me fait une division par 0 !!! Ce qui n'est pas terrible .
Il faudrait que je teste aussi si $distance = 0
Modifié en dernier par pierrotm777 le mer. 01 sept. 2010 20:12, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Tester si une variable est un nombre

#7

Message par Tlem »

Une question = un sujet

Merci de ré-éditer votre message et de créer un nouveau sujet.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre