bc: définir le nombre de chiffres après la virgule

40

bc gère les nombres sous forme d'entiers:

# echo "100/3" | bc
33

bc -l gère 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 la virgule?

    
posée Adam Matan 15.11.2012 - 13:35
la source

4 réponses

52

Définissez la variable spéciale scale :

$ echo "scale=2; 100/3" | bc
33.33
    
réponse donnée chronitis 15.11.2012 - 13:53
la source
7

scale ne fonctionne que pour la division; Si certains geeks en ont besoin en multiplication, vous pouvez le faire en utilisant la manipulation de chaînes. Dites si vous devez multiplier 32 * 0.60 , la réponse est 19.20 . Si vous avez besoin de le faire 19 seul, vous pouvez l'obtenir par différentes méthodes.

  1. Utilisation de la manipulation de chaînes

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    

    Syntaxe de manipulation de chaîne: ${Variable%pattern} , cela supprimera le motif correspondant court après % . Pour plus de détails sur la manipulation des chaînes, consultez le Guide de scripts avancés Bash-Scripting .

  2. Utiliser Scale comme indiqué par **chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. Pour se débarrasser des 0, à la place de la manipulation de chaînes, on peut aussi diviser par 1.

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    
réponse donnée SAGAR BHOOSHAN 06.04.2016 - 12:15
la source
3

En plus des réponses précédentes

echo "scale=2; 1.0150876" | bc

Retours

1.0150876

Ajouter des opérations mathématiques pour obtenir seulement 2 nombres décimaux - (NUMÉRO * 100) / 100

echo "scale=2; (1.0150876 * 100) / 100" | bc

Maintenant, retourne

1.01
    
réponse donnée Michal Zmuda 23.12.2016 - 07:21
la source
0

Arrondi

scale = 2 tronque la réponse à deux chiffres décimaux, mais nous pouvons obtenir un arrondi comme suit:

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
    
réponse donnée spanky 06.04.2018 - 01:34
la source

Lire d'autres questions sur les étiquettes