Shell - operações envolvendo números em ponto flutuante
Dica publicada em Shell Script / Avançado
Shell - operações envolvendo números em ponto flutuante
Dica simples que mostra como proceder para realizar operações aritméticas que envolvam números em ponto flutuante no shell. Sem muita enrolação, vamos direto ao ponto.
Para realizar esse tipo de operação no zsh basta:
(( x = 13.287 / 4.63 ))
$ print $x
2.86976...
Já no ksh (ksh93) altere o valor da variável built-in LC_NUMERIC:
LC_NUMERIC=C
$ (( x = 13.287 / 4.63 ))
$ print $x
2.86976...
NOTA: No zsh/ksh é possível definir a quantidade de dígitos após o ponto decimal utilizando a opção "typeset -F valor nome_da_variável" antes da operação desejada. Nos exemplos acima poderíamos fazer "typeset -F 5 x".
O Bash (assim como o sh, ash, csh) não possui suporte nativo a esse tipo de operação, sendo necessário o uso de comandos externos tais como bc ou dc:
Comando bc:
echo "scale=5 ; 13.287 / 4.63" | bc
ou
bc <<< "scale=5 ; 13.287 / 4.63" *
2.86976
* Redirecionador válido somente no zsh, ksh e bash
Comando dc (calculadora RPN):
dc -e "5k 13.287 4.63 / p"
2.86976
No zsh:
(( 13.287 > 4.63 )) && print Maior || print Menor
Maior
[[ 13.287 -gt 4.63 ]] && print Maior || print Menor
Maior
Novamente no ksh:
LC_NUMERIC=C
$ (( 13.287 > 4.63 )) && print Maior || print Menor
Maior
[[ 13.287 -gt 4.63 ]] && print Maior || print Menor
Maior
Já no Bash, novamente deveremos utilizar comandos externos:
Comando bc:
NOTA: O bc ao realizar comparações numéricas retorna '0' para falso e '1' para verdadeiro.
echo "13.287 > 4.63" | bc
ou
bc <<< "13.287 > 4.63" *
1
* Redirecionador válido somente no zsh, ksh e bash
Comando dc (a título de curiosidade!):
dc -e "[[Maior]p sx] 13.287 4.63 > x"
Maior
Pronto! =)
Mais detalhes (salve seu dia, consulte as man pages!):
man zsh
$ man ksh
$ man bash
$ man bc
$ man dc
Falou!!! ;)
Para realizar esse tipo de operação no zsh basta:
(( x = 13.287 / 4.63 ))
$ print $x
2.86976...
Já no ksh (ksh93) altere o valor da variável built-in LC_NUMERIC:
LC_NUMERIC=C
$ (( x = 13.287 / 4.63 ))
$ print $x
2.86976...
NOTA: No zsh/ksh é possível definir a quantidade de dígitos após o ponto decimal utilizando a opção "typeset -F valor nome_da_variável" antes da operação desejada. Nos exemplos acima poderíamos fazer "typeset -F 5 x".
O Bash (assim como o sh, ash, csh) não possui suporte nativo a esse tipo de operação, sendo necessário o uso de comandos externos tais como bc ou dc:
Comando bc:
echo "scale=5 ; 13.287 / 4.63" | bc
ou
bc <<< "scale=5 ; 13.287 / 4.63" *
2.86976
* Redirecionador válido somente no zsh, ksh e bash
Comando dc (calculadora RPN):
dc -e "5k 13.287 4.63 / p"
2.86976
Apêndice: Realizando comparações numéricas
Para realizar comparações o mesmo conceito acima pode ser aplicado.No zsh:
(( 13.287 > 4.63 )) && print Maior || print Menor
Maior
[[ 13.287 -gt 4.63 ]] && print Maior || print Menor
Maior
Novamente no ksh:
LC_NUMERIC=C
$ (( 13.287 > 4.63 )) && print Maior || print Menor
Maior
[[ 13.287 -gt 4.63 ]] && print Maior || print Menor
Maior
Já no Bash, novamente deveremos utilizar comandos externos:
Comando bc:
NOTA: O bc ao realizar comparações numéricas retorna '0' para falso e '1' para verdadeiro.
echo "13.287 > 4.63" | bc
ou
bc <<< "13.287 > 4.63" *
1
* Redirecionador válido somente no zsh, ksh e bash
Comando dc (a título de curiosidade!):
dc -e "[[Maior]p sx] 13.287 4.63 > x"
Maior
Pronto! =)
Mais detalhes (salve seu dia, consulte as man pages!):
man zsh
$ man ksh
$ man bash
$ man bc
$ man dc
Falou!!! ;)
$ print $((80.12 + 19.45))
99.570000000000007
$ (( 80.12 + 19.45 == 99.57 )) && print Igual || print Diferente
Diferente
Agora:
$ (( x = 80.12 + 19.45 ))
$ (( $x == 99.57 )) && print Igual || print Diferente
Igual
=)