(shell) Opération de réels avec flottants
Eyken
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai pour devoir de créer pour mes études un script shell calculant le moyenne des nombres rajoutés en paramètres.
Le script doit bien sur pouvoir calculer les chiffres à virgules.
Voila mon script :
L'emploie de scale sur la fin permet d'afficher le résultat avec 2 chiffres après la virgule, mais cela ne marche que si les paramètres rentrés sont des entiers. Si l'on y met des nombres à virgule, leur addition les transforme automatiquement en entier, et je n'arrive pas à employer SCALE lors de l'addition des variables entre elles.
Quelqu'un aurait une solution à me proposer ?
Merci d'avance !!
J'ai pour devoir de créer pour mes études un script shell calculant le moyenne des nombres rajoutés en paramètres.
Le script doit bien sur pouvoir calculer les chiffres à virgules.
Voila mon script :
#!/bin/bash count='0' somme='0' for var do echo "scale=2 ; $somme+$var" #on vérifie l'opération effectuée à chaque addition let "somme=$somme+$var" let "count=$sount+1" done echo "scale=2 ; $somme/$count" | bc
L'emploie de scale sur la fin permet d'afficher le résultat avec 2 chiffres après la virgule, mais cela ne marche que si les paramètres rentrés sont des entiers. Si l'on y met des nombres à virgule, leur addition les transforme automatiquement en entier, et je n'arrive pas à employer SCALE lors de l'addition des variables entre elles.
Quelqu'un aurait une solution à me proposer ?
Merci d'avance !!
2 réponses
-
hello
scale est une option de bc, pas du shell. le shell ne peut pas faire d'opérations flottantes, il faut utiliser bc, awk, dc pour faire tout les calculs -
Salut,
Si l'on y met des nombres à virgule, leur addition les transforme automatiquement en entier, et je n'arrive pas à employer SCALE lors de l'addition des variables entre elles.
Normal, bc utilise le point comme décimal et non la virgule.$ echo 'scale=2; 12.75 / 2' | bc 6.37
De plus, ta syntaxe "for var;do..." n'est pas bonne, il faut donner du grain à moudre à la boucle for :for var in "${@}" do ... done