Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/05/2020, à 16:31

joe217

[Résolu] valeur décimale

Bonjour
comment je fais pour avoir la valeur décimale dans mon script;

#!/bin/zsh
count=$#
sum=0
for i in "$@"
do
  sum=$((sum+i))
  moyenne=`expr $sum / $count`
done
echo La moyenne vaut $moyenne

le problème est que j'obtiens 14 au lieu de 14.25 merci

Dernière modification par joe217 (Le 17/05/2020, à 15:11)

Hors ligne

#2 Le 16/05/2020, à 16:43

pingouinux

Re : [Résolu] valeur décimale

Bonjour,

#!/bin/zsh
count=$#
sum=0
for i in "$@"
do
  ((sum+=i))
  moyenne=$(bc -l <<<"$sum / $count")
done
echo La moyenne de "$@" vaut $moyenne

Hors ligne

#3 Le 16/05/2020, à 16:46

joe217

Re : [Résolu] valeur décimale

merci mais j'ai toujours un problème , j'obtiens 14.25000000000000 au lieu de 14.25*

Hors ligne

#4 Le 16/05/2020, à 16:50

pingouinux

Re : [Résolu] valeur décimale

  moyenne=$(bc -l <<<"scale=2; $sum / $count")

Hors ligne

#5 Le 16/05/2020, à 17:20

pingouinux

Re : [Résolu] valeur décimale

Plus simple

#!/bin/zsh
awk '{for(i=1;i<=NF;i++) s+=$i; printf("La moyenne de %s vaut %.2f\n",$0,s/NF)}' <<<"$@"

Hors ligne

#6 Le 16/05/2020, à 17:31

Watael

Re : [Résolu] valeur décimale

plus simple... par rapport au script original complet, pas par rapport à bc, c'est ça ?

@joe127 : expr est une commande externe.
donc, c'est une commande inutile dans un shell compatible POSIX (sh, [sd]*ash, bash, ksh..., zsh)
d'autant qu'elle ne supporte pas davantage les décimaux que l'Évaluation arithmétique d'un shell compatible POSIX.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 16/05/2020, à 17:41

pingouinux

Re : [Résolu] valeur décimale

Watael #6 a écrit :

plus simple... par rapport au script original complet, pas par rapport à bc, c'est ça ?

Oui

Hors ligne

#8 Le 16/05/2020, à 17:59

Watael

Re : [Résolu] valeur décimale

ouf.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 16/05/2020, à 21:32

diesel

Re : [Résolu] valeur décimale

pingouinux a écrit :

Bonjour,

#!/bin/zsh
count=$#
sum=0
for i in "$@"
do
  ((sum+=i))
  moyenne=$(bc -l <<<"$sum / $count")
done
echo La moyenne de "$@" vaut $moyenne

Je proposerais plutôt :

#!/bin/bash
count=$#
sum=0
for i in "$@"
do
  ((sum+=i))
done
moyenne=$(bc -l <<<"$sum / $count")
echo La moyenne de "$@" vaut ${moyenne%%0*}

[EDIT] la syntaxe ${moyenne%%0*} n'est pas bonne. Voir plus bas. [/EDIT]

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 17/05/2020, à 13:30)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#10 Le 16/05/2020, à 22:03

Watael

Re : [Résolu] valeur décimale

pourquoi ? c'est bien scale.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 17/05/2020, à 05:09

diesel

Re : [Résolu] valeur décimale

Ben..., non ; enfin, dans ce cas là.

Parce que ça suppose que tu n'as QUE deux décimales.

Et que se passe-t-il si ta moyenne s'exprime avec trois ou quatre décimales (ou plus) ?

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 17/05/2020, à 05:13)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#12 Le 17/05/2020, à 08:06

DonutMan75

Re : [Résolu] valeur décimale

Bonjour,
j'allais dire attention avec "${moyenne%%0*}" dans le cas où moyenne est un entier (par exemple si moyenne='100' alors ${moyenne%%*0} renvoie '1') mais après quelques tests j'ai l'impression que bc renvoie TOUJOURS un réel dans le cas d'une division (même entière). Ainsi 200/2 renverra 100.0000000...

Donut

Hors ligne

#13 Le 17/05/2020, à 10:32

pingouinux

Re : [Résolu] valeur décimale

Oui, mais :

$ echo $moyenne
100.00000000000000000000

$ echo ${moyenne%%0*}
1

Éventuellement ceci :

$ sed 's/0*$//' <<<${moyenne}
100.

Hors ligne

#14 Le 17/05/2020, à 12:40

diesel

Re : [Résolu] valeur décimale

pingouinux a écrit :

Oui, mais :

$ echo $moyenne
100.00000000000000000000

$ echo ${moyenne%%0*}
1

Éventuellement ceci :

$ sed 's/0*$//' <<<${moyenne}
100.

Effectivement Pingouinux, la méthode que j'ai proposée ne marche pas à tous les coups. En fait, après relecture attentive du man de bash, la bonne syntaxe est la suivante

echo ${moyenne%%*(0)}

Vous l'avez bien compris, l'idée est de virer les zéros non significatifs sans avoir une idée a priori de leur nombre.

Je proposerais bien

sed -e 's/0*$//' -e 's/\.$//' <<<${moyenne}

Mais on doit bien trouver une manière de virer le point final en bash s'il n'y a pas de zéro qui reste. Je m'attelle à ça et je vous donne le code qui va bien.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 17/05/2020, à 12:55)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#15 Le 17/05/2020, à 13:20

pingouinux

Re : [Résolu] valeur décimale

On peut regrouper les deux :

sed 's/\.\?0*$//' <<<${moyenne}

Hors ligne

#16 Le 17/05/2020, à 13:28

diesel

Re : [Résolu] valeur décimale

Ou en bash :

#!/bin/bash
count=$#
sum=0
for i in "$@"
do
  ((sum+=i))
done
moyenne=$(bc -l <<<"$sum / $count")
moyenne=${moyenne%%*(0)}
echo La moyenne de "$@" vaut ${moyenne%[,.]}

J'ai pas trouvé comment supprimer les zéros, puis le point ou la virgule en une seule opération.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 17/05/2020, à 13:31)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#17 Le 17/05/2020, à 13:47

Watael

Re : [Résolu] valeur décimale

j'ai raté un truc ?

$ moyenne=12.0300
$ echo ${moyenne%%*(0)}
12.0300

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#18 Le 17/05/2020, à 13:56

MicP

Re : [Résolu] valeur décimale

michel@debT450:~$ moyenne=12.0300
michel@debT450:~$ echo ${moyenne%%+(0)}
12.03
michel@debT450:~$ 

Hors ligne

#19 Le 17/05/2020, à 14:03

pingouinux

Re : [Résolu] valeur décimale

@Watael #17 :
Il faut d'abord faire

shopt -s extglob

Hors ligne

#20 Le 17/05/2020, à 14:16

LeoMajor

Re : [Résolu] valeur décimale

bonjour,

solution un peu exotique avec dc.sed (calculatrice), qui fonctionne avec les entiers et décimaux.

:~$ cat ~/tmps/dc.bash
#!/bin/bash
count="$#"
rq="$1"

for item in "$@"; do if [ "$item" != "$1" ]; then rq="${rq} ${item} +"; fi; done
rq="${rq} p"

echo "somme:$rq"
echo "moyenne:${rq} ${count} / p"

#somme + moyenne
sed -nf /usr/share/doc/sed/examples/dc.sed  <<<"4k ${rq} ${count} / p"

renvoie

:~$  bash ~/tmps/dc.bash 15.5 12.3 10.8 8 _24.85
somme:15.5 12.3 + 10.8 + 8 + _24.85 + p
moyenne:15.5 12.3 + 10.8 + 8 + _24.85 + p 5 / p
21.75
4.3500

_24.85 est compris comme -24.85
4k ; 4 décimales

Hors ligne

#21 Le 17/05/2020, à 15:10

joe217

Re : [Résolu] valeur décimale

merci pour vos réponses

Hors ligne