O Python parece ter o seu comportamento preferido:
$ echo 'print(round(' "5+50*3/20 + (19*2)/7" ', 3))' | python3
17.929
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
Basta escrever isto:
read exp
printf %.3f $(echo "$exp" | bc -l)
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")"
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)'