Pular para o conteúdo

Trabalhar com numeros flutuantes no bash [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Trabalhar com numeros flutuantes no bash [RESOLVIDO]

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 [*****].

Responder tópico

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

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.

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?

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

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

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder