Trabalhar com numeros flutuantes no bash [RESOLVIDO]

1. Trabalhar com numeros flutuantes no bash [RESOLVIDO]

claudiney teixeira
ClaudineyTeixeir

(usa Linux Mint)

Enviado em 18/10/2017 - 11:50h

Como trabalhar números flutuantes dentro do bash? Estou fazendo um curso de certificação no SENAC e na hora de criar scripts sempre esbarro nisto. Ele não trabalha com números quebrados sempre da erro. Se o numero for inteiro dá certinho. Vou postar dois exemplos bem básicos para que eu seja entendido. E se alguém puder me ajudar pode corrigir meu Script para me mostrar onde estou errando ou qual comando deveria utilizar.
Exemplo um calculo de media escolar
#!/bin/bash
echo "Entre com a nota do Bim 1"
read bim1
echo "Entre com a nota do Bim 2"
read bim2
echo "Entre com a nota do Bim 3"
read bim3
echo "Entre com a nota do Bim 4"
read bim4
echo
result=$((($bim1+$bim2+$bim3+$bim4)/4))
echo $result

Ele dá certo, porem se eu lançar uma nota for 4,5 por exemplo, teremos um erro na resposta.


Segundo exemplo
#!/bin/bash
echo "Quantas horas você trabalha por mês?"
read hrmes
echo "Quanto você ganha por hora?"
read salhora
result=$(($hrmes*$salhora))
echo "Seu salário é de:" $result

Também da certo, mas se a hora for 10,20 por hora vai dar erro.
Se tiver de calcular IR, INSS, então. Ai ferrou de vez.

Agradeço desde de já, pois uma coisa básica assim consigo fazer no phyton e não consigo fazer no bash e acabo me sentido meio [*****].


  


2. Re: Trabalhar com numeros flutuantes no bash [RESOLVIDO]

Breno Lacerda de Alustau Paiva
brenolacerda

(usa CentOS)

Enviado em 18/10/2017 - 11:59h

Cara, já passei por isso. E é um pouco chato.

Sinceramente, aconselho você a trabalhar com outra linguagem como Python e chamar importar uma lib pra trabalhar com o que precisar do shell. Maaas, caso tu queria forçar mesmo no bash, segue um exemplo do que fiz. Uma gambiarra GRANDE. kkkkk, mas resolveu.

$completed = ALGUM VALOR
$divideCompleted =ALGUM VALOR
#Divide e cria a porcentagem de Completadas
divideCompleted=$(dc -e "3k $completed $outgoing / p")
porcentagemCompleted=$(dc -e "3k $divideCompleted 100 * p")

#Divide e cria a porcentagem de Falhas
divideFailed=$(dc -e "3k $failed $outgoing / p")
porcentagemFailed=$(dc -e "3k $divideFailed 100 * p")

#Indice indicador: 70%
variavel=$(dc -e "3k 40 30 + p")

#Gambiarra para truncar o numero. Já que o BASH não trabalha com ponto flutuante
echo $porcentagemCompleted >> /tmp/porcentagemCompleted
echo $porcentagemFailed >> /tmp/porcentagemFailed
echo $variavel >> /tmp/variavel

#Armazena a gambiarra em variável
parte0=$(cat /tmp/porcentagemFailed | cut -d '.' -f1)
parte1=$(cat /tmp/porcentagemCompleted | cut -d '.' -f1)
parte2=$(cat /tmp/variavel | cut -d '.' -f1)

#Removendo o lixo das gambiarras.
rm /tmp/porcentagemCompleted
rm /tmp/porcentagemFailed
rm /tmp/variavel


3. Trabalhar com numeros flutuantes no bash.

claudiney teixeira
ClaudineyTeixeir

(usa Linux Mint)

Enviado em 18/10/2017 - 12:17h

Obrigado amigo, já e um caminho. Mas no meu curso tem de ser no "vim" e no "bash" mesmo. KKKKKK
Se fosse outra linguagem tava no veludo.
Tem um tal de " |bc ". Você sabe como usá-lo? Ou alguém do Fórum?


4. Re: Trabalhar com numeros flutuantes no bash [RESOLVIDO]

Breno Lacerda de Alustau Paiva
brenolacerda

(usa CentOS)

Enviado em 18/10/2017 - 12:21h

O BC é uma calculadora simples. QUe trabalha com ponto flutuante.
Tem um tutorial completo aqui: https://www.vivaolinux.com.br/artigo/BC-A-sua-calculadora-programavel-no-Linux?pagina=2


5. Re: Trabalhar com numeros flutuantes no bash [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 18/10/2017 - 14:17h

ClaudineyTeixeir escreveu:

Como trabalhar números flutuantes dentro do bash? Estou fazendo um curso de certificação no SENAC e na hora de criar scripts sempre esbarro nisto. Ele não trabalha com números quebrados sempre da erro. Se o numero for inteiro dá certinho. Vou postar dois exemplos bem básicos para que eu seja entendido. E se alguém puder me ajudar pode corrigir meu Script para me mostrar onde estou errando ou qual comando deveria utilizar.
Exemplo um calculo de media escolar
#!/bin/bash
echo "Entre com a nota do Bim 1"
read bim1
echo "Entre com a nota do Bim 2"
read bim2
echo "Entre com a nota do Bim 3"
read bim3
echo "Entre com a nota do Bim 4"
read bim4
echo
result=$((($bim1+$bim2+$bim3+$bim4)/4))
echo $result

Ele dá certo, porem se eu lançar uma nota for 4,5 por exemplo, teremos um erro na resposta.


Segundo exemplo
#!/bin/bash
echo "Quantas horas você trabalha por mês?"
read hrmes
echo "Quanto você ganha por hora?"
read salhora
result=$(($hrmes*$salhora))
echo "Seu salário é de:" $result

Também da certo, mas se a hora for 10,20 por hora vai dar erro.
Se tiver de calcular IR, INSS, então. Ai ferrou de vez.

Agradeço desde de já, pois uma coisa básica assim consigo fazer no phyton e não consigo fazer no bash e acabo me sentido meio [*****].


Boa tarde Claudiney.
Veja se ajuda:
bc <<< "scale=2;(5+6)/2"
5.50

Ou
awk '{printf "%.2f\n" ,($1+$2+$3)/NF}' <<< "10 10 8"
9.33
NF= Número de CAMPOS


Att.:
Marcelo Oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts