Avaliação de uma expressão e arredondamento de até três casas decimais

1

Eu tenho uma expressão "5+50*3/20 + (19*2)/7" Eu preciso arredondá-lo para 3 casas decimais. A resposta para isso é 17.92857142857143 . Quando eu uso o script abaixo ele está me dando 17.928 . A resposta deve ser 17.929 .

read exp
echo "scale=3; $exp" |bc -l

E mais uma pergunta é como usar printf para fazer a mesma tarefa

    
por WannaBeCoder 08.12.2014 / 15:50

4 respostas

1

O Python parece ter o seu comportamento preferido:

$ echo 'print(round(' "5+50*3/20 + (19*2)/7" ', 3))' | python3
17.929
    
por 08.12.2014 / 16:16
5

Basta escrever isto:

read exp
printf %.3f $(echo "$exp" | bc -l)
    
por 28.02.2017 / 09:54
3

Você pode simplificar a expressão do seu comentário usando "here string" e removendo os dois echo s:

 printf "%.3f\n" "$(bc -l <<< "$var")"

ou até mesmo

 printf "%.3f\n" "$(bc -l <<< "5+50*3/20 + (19*2)/7")"
    
por 08.12.2014 / 16:14
0

Supondo que a variável $ exp receba o valor 17.92857142857143 no seu script de shell, use a seguinte linha para arredondar e imprimi-lo:

python2 -c 'print round('$exp',3)'

    
por 08.12.2014 / 16:32