web-dev-qa-db-fra.com

bc: définir le nombre de chiffres après le point décimal

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?

51
Adam Matan

Définissez la variable spéciale scale:

$ echo "scale=2; 100/3" | bc
33.33
67
chronitis

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.

  1. 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 .

  2. Utilisation de Scale comme indiqué par **chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. 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
    
10
SAGAR Nair

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
4
Michal Zmuda

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
2
Rohit Khune

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
2
spanky