Você não pode fazer isso com o óbvio scale=0
devido ao modo como a escala é determinada.
A documentação explica indiretamente que a divisão por um é suficiente para redefinir a saída para corresponder ao valor de scale
, cujo padrão é zero:
expr1 / expr2 The result of the expression is the quotient of the two expressions. The scale of the result is the value of the variable scale.
p=12.34; echo "($p*100)" | bc
1234.00
p=12.34; echo "($p*100)/1" | bc
1234
Se a sua versão de bc
não lidar com isso, transmita-a por sed
:
p=12.34; echo "($p*100)" | bc | sed 's!\.0*$!!'
1234
Este RE só tira zeros à direita de um número inteiro. Então, 3,00 reduzirá para 3, mas 3,10 não reduzirá para 3,1. Se você realmente precisa da capacidade total de retirar os zeros à direita de um número decimal, é necessário um PCRE:
p=12.34; echo "($p*100)" | bc | perl -pe '/\./ && s/0+$/$1/ && s/\.$//'
Mas se você for usar perl
, pode dispensar bc
:
p=12.34; perl -e '$p = shift; print $p * 100, "\n"' "$p"