Bonjour,
Existe-t-il une fonction pour obtenir la partie entière d'un nombre décimal svp ?
D'avance merci
Bonjour,
Existe-t-il une fonction pour obtenir la partie entière d'un nombre décimal svp ?
D'avance merci
J'ai trouvé ça :
Ca à l'air de marcher...
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $balAmount | awk '{print int($1)}'
Salut,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x="1.111" echo "${x%%.*}"
il semble ne pas en exister qu'une.
Code : Sélectionner tout - Visualiser dans une fenêtre à part LC_NUMERIC=C printf '%0.f\n' 1.111![]()
Bonsoir,
attention, une manière fait un arrondi alors que l'autre se contente de prendre ce qui est à gauche du point et zappe le reste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $ LC_NUMERIC=C printf '%0.f\n' 1.111 1 $ LC_NUMERIC=C printf '%0.f\n' 1.789 2 $ x="1.111"; echo "${x%%.*}" 1 $ x="1.789"; echo "${x%%.*}" 1
Bonsoir,
Toujours dans la même veine.
J'ai bidouillé ça pour obtenir l'arrondi de la division en question :
Ce n'est pas très propre, peut-on faire mieux svp ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Monthly_cost=280 Hourly_cost=0.46 LC_NUMERIC=C printf '%0.f\n' $(echo "scale=2; $Monthly_cost / $Hourly_cost" | bc)
Mais surtout, comment récupérer le résultat dans une variable ?
comment récupérer le résultat dans une variable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ printf --help | grep -- -v
Voici une fonction pure built-in bash qui permet de diviser un entier par un flottant et retourne l'entier arrondi le plus proche:
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 divf () { x1=${2#*.}; y1=${2%.*}; x2=$((10**${#x1})); x1=$(((y1*x2)+x1)); x3=$(((($1*x2)%x1)*100)); res=$((($1*x2)/x1)); [ $((x3/x1)) -gt 50 ] && echo $((res+1)) || echo $res }
Je laisse l'exercice pour considérer le premier argument aussi comme un flottant et/ou d'admettre des valeur tel que .45 en lieu et place de 0.45
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ divf 280 0.46 609 $ divf 280 1.46 192 $ divf 280 46 6
Bonjour,
Peut être plus propre juste avec bc
Ou bien avec dc
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b" | bc
Cordialement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dc -e '[1+]sa2k' -e "$Monthly_cost $Hourly_cost" -e '/dsb0k1/dlb-_0.5!<ap'
Yep, mais dans ce cas, on retire aussi le echo:
Code : Sélectionner tout - Visualiser dans une fenêtre à part bc <<<"scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b"
J'avais essayé plusieurs combinaisons pour supprimer le echo sans résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (standard_in) 1: syntax error
J'ai laissé tomber.
Je préfère, et de loin, dc.
le <<< est spécifique bash, le plus standard est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 bc <<_EOF_ scale=2; a=$Monthly_cost / $Hourly_cost ; scale=0 ; b=a / 1 ; scale=2 ; if (a-b >= 0.5) b=++b ; b _EOF_
Bonjour,
Les 2 propositions fonctionnent correctement ce matin ???
Merci.
Partager