IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comparaison de valeurs avec décimales


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur industriel
    Inscrit en
    Août 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2016
    Messages : 8
    Par défaut Comparaison de valeurs avec décimales
    Bonjour,

    Je suis novice en programmation, voici mon problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [[ $x > "-6" && $x < "17" && $ai > "31.5" ]] || [[ $x > "-13" && $x < "-6" || $x == "-6" && $ai > "34.5" ]]; then
        resultat1=$(echo 1)
    else
        resultat1=$(echo 0)
    cette commande semble ne pas marcher sachant que x=4.0 et ai=37.9

    voila ce que le debug donne

    + [[ 4.0 > -6 ]]
    + [[ 4.0 > -13 ]]
    + [[ 4.0 < -6 ]]
    ++ echo 1
    + resultat1=1
    je ne vois pas:
    1. comment gérer les decimals
    2.pourquoi il ne fait pas les tests sur ai également...

    Pourriez-vous m'aider à créer ce test?

    Merci beaucoup

    Jérôme

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    d'abord, < et > sont des opérateurs de comparaison lexicale (ils comparent des mots, non des nombres).
    ensuite, le shelll, tout seul, ne gèrent pas les décimaux, il faut utiliser bc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "3.15 > 4" | bc -l
    0 # c'est faux
    $ echo "3.15 < 4" | bc -l
    1 # c'est vrai
    ici, on utilise > et < parce que ce n'est pas le shell qui les traite, mais bc !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur industriel
    Inscrit en
    Août 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2016
    Messages : 8
    Par défaut grande operation
    Super merci beaucoup!

    Mais pourriez-vous me dire comment inclure ca dans ma grande expression?

    Merci!

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ resultat1=$(( $(echo "($x > -6 && $x < 17 && $ai > 31.5) || ($x > -13 && $x < -6 || $x == -6 && $ai > 34.5)" | bc -l) ))
    $ echo $resultat1 
    1
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur industriel
    Inscrit en
    Août 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2016
    Messages : 8
    Par défaut Merci!
    Super merci !!!!
    Bonne journée
    Jérôme

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Une alternative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -vx="$x" -vai="$ai" 'END{if (((x>-6)&&(x<17)&&(ai>31.5))||((x>-13)&&(x<-6))||((x==-6)&&(ai>34.5))) print "1"; else print "0";}' /dev/null
    0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -vx="$x" -vai="$ai" 'END{if (((x>-6)&&(x<17)&&(ai>31.5))||((x>-13)&&(x<-6))||((x==-6)&&(ai>34.5))) print "1"; else print "0";}' /dev/null
    1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import de valeur numérique avec décimale
    Par baime dans le forum SAS Base
    Réponses: 1
    Dernier message: 17/08/2012, 21h12
  2. Comparaison de valeur avec !=
    Par tom06440 dans le forum Langage
    Réponses: 2
    Dernier message: 25/07/2011, 09h01
  3. Comparaison de lettres avec valeur ASCII
    Par Vince dans le forum C++
    Réponses: 4
    Dernier message: 04/03/2009, 11h20
  4. Comparaison de valeur de ligne avec deux feuilles différentes
    Par charlix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/07/2008, 15h54
  5. Réponses: 5
    Dernier message: 27/10/2007, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo