bc: define o número de dígitos após o ponto decimal

39

bc processa números como números inteiros:

# echo "100/3" | bc
33

bc -l lida com números como objetos de ponto flutuante:

# echo "100/3" | bc -l
33.33333333333333333333

Existe uma maneira de limitar o número de dígitos após o ponto decimal?

    
por Adam Matan 15.11.2012 / 13:35

4 respostas

49

Defina a variável especial scale :

$ echo "scale=2; 100/3" | bc
33.33
    
por chronitis 15.11.2012 / 13:53
7

scale funciona apenas para divisão; Se alguns geeks precisarem de multiplicação, você pode conseguir isso usando a manipulação de strings. Diga se você precisa multiplicar 32 * 0.60 , a resposta é 19.20 . Se você precisar obter 19 sozinho na resposta, poderá obtê-lo por métodos diferentes.

  1. Usando a manipulação de string

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

    Sintaxe da manipulação de sequências: ${Variable%pattern} , isso excluirá o padrão de correspondência curto que vem após % . Para obter mais detalhes sobre manipulação de strings, consulte o Guia avançado de script de script .

  2. Usando Scale como declarado por **chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. Para se livrar dos 0s à direita, em vez da manipulação de strings, também é possível dividir por 1.

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    
por SAGAR BHOOSHAN 06.04.2016 / 12:15
3

Além das respostas anteriores

echo "scale=2; 1.0150876" | bc

Retorna

1.0150876

Adicione operações matemáticas para obter apenas dois números decimais - (NUMBER * 100) / 100

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

Agora retorna

1.01
    
por Michal Zmuda 23.12.2016 / 07:21
0

Round-off

scale = 2 trunca a resposta para dois dígitos decimais, mas podemos obter um arredondamento assim:

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
    
por spanky 06.04.2018 / 01:34