Uma maneira simples é usar printf
:
$ printf "%.3f\n" 0.005000000000
0.005
Para remover o 0
inicial, basta analisá-lo com sed
:
$ printf "%.3f\n" 0.005000000000 | sed 's/^0//'
.005
No Ubuntu 14.04.1 LTS 64-bit
bash Eu estou descartando as variáveis de ponto flutuante multiplicando as variáveis bash do ponto flutuante em bc
pela escala definida como 3; no entanto, não consigo obter o número de dígitos após o ponto decimal para zero e me livrar do zero à esquerda do ponto decimal. Como posso transformar, digamos 0.005000000
em .005
? Isso é necessário devido à minha convenção de nomenclatura de arquivos. Obrigado pelas suas recomendações.
UPDATE: Posso usá-lo para variáveis de shell já definidas e redefini-las? O código a seguir me dá um erro.
~/Desktop/MEEP$ printf "%.3f\n" $w
bash: printf: 0.005000: invalid number
0,000
A saída da localidade
@vesnog:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
A saída de echo $w
@vesnog:~$ echo $w
0.005000
Existe uma variável especial chamada scale
. Você pode definir essa variável para limitar a precisão.
EXEMPLO
echo "300/7" | bc -l
Saída:
42.85714285714285714285
Para limitar a precisão,
echo "scale=2; 300/7" | bc -l
Saída:
42,85
ATUALIZADO
echo "scale=3; 300/7" | bc -l | sed 's/[0-9]*\././g'
Saída:
.857
Tags bash bc floating-point