79 votes

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 point décimal ?

104voto

chronitis Points 11442

Définissez le scale variable spéciale :

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

17voto

SAGAR Nair Points 1267

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

  1. Utilisation de la manipulation des chaînes de caractères

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

    Syntaxe de manipulation des chaînes de caractères : ${Variable%pattern} cela supprimera les motifs de correspondance courts qui suivent % . Pour plus de détails sur la manipulation des chaînes, voir le Guide avancé des scripts Bash .

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

    $ echo "scale=0; 32*60/100" | bc
    19
  3. Pour se débarrasser des 0 de queue, au lieu de manipuler les chaînes de caractères, on peut aussi faire une division par 1.

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232

6voto

Michal Zmuda Points 299

En complément des réponses précédentes

echo "scale=2; 1.0150876" | bc

Renvoie à

1.0150876

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

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

Les retours actuels

1.01

6voto

Rohit Khune Points 61

Vous pouvez aussi utiliser la commande printf pour arrondir le résultat jusqu'à 3 décimales

# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333

3voto

spanky Points 93

Arrondissement

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

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X