Forum Programmation.shell Récupérer la valeur entière d'un double

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
7
avr.
2025

Bonjour à tous,

Je rédige un script shell avec bash.

Je récupère une donnée de puissance à l'aide de mosquitto.

Le problème c'est que c'est un double.

Il peut prendre les formes suivantes :
-0.0
-10.8
-250.49

J'ai essayé avec bc mais je dois peut être mal l'utiliser !

Voici le code
https://debian-facile.org/paste-2560EE6FD6-fc785a372efa20aaa23819943749f060

Résultat du debug
https://debian-facile.org/paste-AAE1DA6606-a05c916b341d3828ec9f743bbb436aa3

Je reçois : powerAC=31.7
et powerAC_entier=$(echo "$powerAC" | bc)
me donne powerAC_entier=31.7

Merci pour vos conseils

  • # s'affranchir de la virgule ?

    Posté par  . Évalué à 4 (+1/-0).

    tes exemples ont tous un chiffre apres la virgule
    si tu fais x10 tu n'as plus de virgule

    puis tu compares à 3140 ou 3150 au lieu de 314 et 315 :D

  • # scale ou cut

    Posté par  . Évalué à 2 (+1/-0).

    Bonjour. Tu peux essayer :

    echo "scale=0;$powerAC/1" | bc
    

    ou

    echo $powerAC | cut -d '.' -f 1

  • # bc -l ....

    Posté par  . Évalué à 3 (+1/-0).

    … pour les nombres à virgule flottante.

  • # Pourquoi .....

    Posté par  . Évalué à 2 (+0/-0).

    … faire un script shell qui fait plein de trucs puis appeler du python ?

    Pourquoi ne pas tout faire en python ? Ce serait plus cohérent. parce que faire du shell qui appelle bc, pus un autre truc qui appelle Python … je suis sûr que Python contient déjà tout ce qu'il faut.

  • # Bash n'est pas fait pour traiter des nombres

    Posté par  . Évalué à 2 (+0/-0). Dernière modification le 07 avril 2025 à 18:03.

    Surtout des décimaux comme l'on fait remarquer les commentaires précédents.

    Mais tu peux les traiter comme des chaînes de caractères :

    w=250.49
    echo ${w%%.*}

    Il y a d'autres solutions, avec printf par exemple.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.