Bonjour,
je voulais savoir si quelqu'un savait faire un arrondi dans des calculs en bash.
Par exemple, lorsque j'ai 19985, je voudrais obtenir 20000, ou lorsque j'ai 1024 je voudrais obtenir 1000.
Existe t-il une fonction déjà toute faite, ou dois je le coder moi même ?
Merci
# pas trop
Posté par deadbeef . Évalué à 3.
#!/bin/bash
function roundk {
a=$(( $1 / 1000 ))
b=$(( $1 % 1000 ))
if [ $b -gt 500 ] ; then
echo $(( $1 + 1000 - $b ))
else
echo $(( $1 - $b ))
fi
}
echo 19985 = `roundk 19985`
echo 1024 = `roundk 1024`
[^] # Re: pas trop
Posté par mberro . Évalué à 2.
[^] # Re: pas trop
Posté par metcox . Évalué à 2.
roundk 424242 => 424000
roundk 128 => 0
Le hic vient du choix du diviseur 1000 qui est basé sur les exemples fournies.
Dans un cadre général ce script ne marche pas.
Faudrait plutôt jouer avec le logarithme en base 10 ...
[^] # Re: pas trop
Posté par deadbeef . Évalué à 3.
Si c'est un arrondi tel que seuls des 0 peuvent suivre le premier digit, pas la peine d'utiliser des log10 (heureusement parce que bonne chance en bash), ça reste trivial:
#!/bin/bash
function rounda {
if [[ ${1:1:1} == "" ]] ; then
echo "$1"
else
if [ ${1:1:1} -gt 5 ] ; then
first=$(( ${1:0:1} + 1 ))
else
first=${1:0:1}
fi
echo -n $first
l="`echo $1 | wc -c`"
for i in `seq 2 $(($l-1))`; do echo -n "0" ; done
fi
}
echo 424242 = `rounda 424242`
echo 128 = `rounda 128`
echo 11 = `rounda 11`
résultat:
424242 = 400000
1985 = 2000
128 = 100
11 = 10
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.