bc
traite les nombres comme des entiers:
# echo "100/3" | bc
33
bc -l
traite les nombres comme des objets à virgule flottante:
# echo "100/3" | bc -l
33.33333333333333333333
Existe-t-il un moyen de limiter le nombre de chiffres après le signe décimal?
Définissez la variable spéciale scale
:
$ echo "scale=2; 100/3" | bc
33.33
scale
ne fonctionne que pour la division; si certains geeks en ont besoin lors de la multiplication, vous pouvez y parvenir en utilisant la manipulation de chaîne. Dites si vous devez multiplier 32 * 0.60
, answer est 19.20
. Si vous avez besoin de l'obtenir seul en réponse, vous pouvez l'obtenir par différentes méthodes.
Utilisation de la manipulation de chaîne
$ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
19
Syntaxe de manipulation de chaîne: ${Variable%pattern}
, ceci supprimera le motif de correspondance court suivi de %
. Pour plus de détails sur la manipulation des chaînes, voir le Guide avancé de script de bash .
Utilisation de Scale
comme indiqué par **chronitis**
$ echo "scale=0; 32*60/100" | bc
19
Pour se débarrasser des zéros de fin, au lieu de manipuler des chaînes, on peut aussi faire une division par 1.
$ echo "0.232 * 1000" | bc
232.000
$ echo "0.232 * 1000 / 1" | bc
232
En plus des réponses précédentes
echo "scale=2; 1.0150876" | bc
Résultats
1.0150876
Ajoutez des opérations mathématiques pour obtenir seulement 2 nombres décimaux - (NUMBER * 100)/100
echo "scale=2; (1.0150876 * 100) / 100" | bc
Maintenant revient
1.01
vous pouvez également utiliser la commande printf pour arrondir le résultat jusqu'à 3 décimales
# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333
Arrondi
scale = 2 tronque la réponse à deux chiffres décimaux, mais nous pouvons arrondir comme ceci:
$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12