Pages : 1
#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
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
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
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