decimais da entrada e saída [RESOLVIDO]

1. decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 30/11/2021 - 18:59h

estou criando um programa que necessita de uma entrada em decimal, e de uma saída em decimal também. Testando comandos, eu vi que "echo $(( 10/3 ))" retorna 3, e não 3,33333 como esperado. ao mesmo tempo, 3.3 ou 3,3 não são aceitos. teria alguma forma de calcular com esses numeros?


  


2. MELHOR RESPOSTA

Rafael Grether
rafael_grether

(usa FreeBSD)

Enviado em 30/11/2021 - 19:11h


Seria isso que você procura?

echo "scale=4;10/3" | bc

#com decimais na entrada
echo "scale=4;10.2/3.2" | bc


3. Re: decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 30/11/2021 - 20:57h

funcionou bem essa junção de echo com bc, mas não sei como implementar no meu código... vou colocar um trecho dele:


read -p "nota 1: " nota1
read -p "nota 2: " nota2
read -p "nota 3: " nota3
read -p "media: " media
(( total = nota1+nota2+nota3 ))
((total2 = total-media))
#A verificação de positivo ou não eu tirei, pro codigo aqui ficar menor
echo "falta $total2 no ultimo bimestre para passar de ano"



4. Re: decimais da entrada e saída

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/11/2021 - 20:58h

UmMeroUsuario escreveu:

estou criando um programa que necessita de uma entrada em decimal, e de uma saída em decimal também.
Testando comandos, eu vi que "echo $(( 10/3 ))" retorna 3, e não 3,33333 como esperado. ao mesmo tempo, 3.3 ou 3,3 não são aceitos. teria alguma forma de calcular com esses números?

Uma outra opção é usar o awk:
awk '{printf "%.3f\n",$1/$2}' <<< "10 3" 

3.333
Obs.=» printf "%.3f\n", onde .3 define o nº de casas decimais.
-----------------------------------------------------------------------
for n in {0..2};do read -p "Nota $((n+1)): " nota[$n];done
awk '{for(n=1;n<=NF;n++) tt+=$n;}END{ printf "Soma: %.2f\nMedia: %.2f\n",tt,tt/NF}' <<< "${nota[@]}"


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



5. Re: decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 01/12/2021 - 17:18h

assim como o anterior, funcionou muito bem, mas estava efetuando testes com uma variavel definida como 3,333. simplesmente joguei no:
(( aaa = 3,333 )) ; awk '{printf "%.3f\n",$1}' <<< $aaa
e a saída foi 3.000... ou seja: a entrada foi convertida em um numero inteiro... teria alguma forma de eu introduzir dados já como decimal, sem dar esse problema?


6. Re: decimais da entrada e saída

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/12/2021 - 19:42h

Antes de tudo, lembre-se que o bash não "trata" número decimal,
portanto:
(( aaa = 3,333 ))
a var aaa=3
faça:
aaa=3.333

-------------------------------------------------------------------------------------------------
Troque a , por .
x=1,234
awk '{printf "%.3f\n",$1}' <<< ${x/,/.}
1.234



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



7. Re: decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 01/12/2021 - 20:22h

pessoas, eu nao estou sabendo aplicar o awk no codigo, deem um help aí

#!/bin/bash -x

echo "calculadora de notas"
echo "MODO:"

select modo in quanto\ preciso\ no\ ultimo\ bimestre
do
case $modo in
quanto\ preciso\ no\ ultimo\ bimestre)
read -p "NOTA BIMESTRE 1: " bim1
read -p "NOTA BIMESTRE 2: " bim2
read -p "NOTA BIMESTRE 3: " bim3
read -p "MEDIA: " media
read -p "Continuar? (S/N): " confirm && [[ $confirm == [sS] ]] || exit 1

media2=$media*4
soma=$bim1+$bim2+$bim3
falta=$media2-$soma

[[ $falta -gt 0 ]] && awk '{printf "falta %.3f pontos\n",$1}' <<< $falta || echo "está passado \O/"
;;
*)
echo "invalid option"
;;
esac
break;
done


deletei algumas coisas, entao tem funções (que estao funcionando) que estao sem sentido aí no meio

notei que a saída do "awk" sempre é o valor que eu coloco na entrada "media"... :/


8. Re: decimais da entrada e saída

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/12/2021 - 00:52h

Não funciona com CASAS DECIMAIS!
------------------------------------------------
O que é isso????
		media2=$media*4
soma=$bim1+$bim2+$bim3
falta=$media2-$soma

Até onde conheço, essas operações matemáticas não serão feitas....
A não ser que direcione para o 'bc'
--------------------------------------------------------------------------------------------------------------
Qual é essa Média?
read -p "MEDIA: " media 

Seria a soma dos 3 bimestres/3?
---------------------------------------------------------------------------------------------------------------
Considerando que a Média é o total de ponto que
deve atingir somando as notas dos bimestres_{1..4} ,
Temos:
#!/usr/bin/env bash
lin='------------------------------';gc='\x1b[1;32m';fc='\x1b[m';rc='\x1b[1;38m';yc='\x1b[1;33m';
media='6';
ttpontos=$((media*4));
printf "\x1bc ${lin}\n Calculadora de Notas.\n Objetivo: $ttpontos pontos\n ${lin}\n"

for n in {0..2};do
read -p " Nota $((n+1))º Bimestre: " nota[$n]; #Armazena as notas em uma MATRIZ
done
echo " $lin"
pts=$(printf "%10s"|sed 's/ /· /g');
for ((n=1;n<=20;n++)) { echo -en " Calculando ${pts:0:$n}\r";sleep 0.0625;};echo; ##Só pra dar emoção.....
awk 'BEGIN{RS=" ";}{tt+=$0;}END{printf "Soma=%.2f\nMedia=%.2f\n",tt,tt/NR}' <<< "${nota[@]}" > notas
. notas
wait;
printf " ${lin}\n Media:\t$Media\n Soma:\t$Soma\n ${lin}\n"
awk '{dif=($2-$1);if($1 >= $2) print "'$gc' Aprovado'$fc'";else if(dif>10) printf "'$rc' Reprovado: Faltam %.2f pontos'$fc'\n",dif;else printf " Falta(m) %.2f ponto(s)\n",dif}' <<< "$Soma $ttpontos"
echo " ${lin}";





9. Re: decimais da entrada e saída [RESOLVIDO]

Rafael Grether
rafael_grether

(usa FreeBSD)

Enviado em 02/12/2021 - 18:14h


UmMeroUsuario escreveu:
funcionou bem essa junção de echo com bc, mas não sei como implementar no meu código... vou colocar um trecho dele:


Redirecione a saída do echo pra variavel:

#!/bin/bash
read -p "nota 1: " nota1
read -p "nota 2: " nota2
read -p "nota 3: " nota3
read -p "media: " media

total=`echo "scale=2;$nota1+$nota2+$nota3"|bc`
total2=`echo "scale=2;$total-$media"|bc`

echo "falta $total2 no ultimo bimestre para passar de ano"


10. Re: decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 02/12/2021 - 18:33h


msoliver escreveu:
Qual é essa Média?
read -p "MEDIA: " media 

Seria a soma dos 3 bimestres/3?
---------------------------------------------------------------------------------------------------------------
Considerando que a Média é o total de ponto que
deve atingir somando as notas dos bimestres_{1..4} ,


No caso a moral do codigo é eu jogar 3 bimestres e o valor da media, e ele calcula a nota minima necessaria no 4º bimestre


11. Re: decimais da entrada e saída [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/12/2021 - 01:04h

Aqui funcionou, testa ai...
#!/usr/bin/env bash

lin='------------------------------';
printf "\x1bc ${lin}\n Calculadora de Notas.\n ${lin}\n";
for n in {1..4};do
(($n<=3)) && ttlo=" Nota do ${n}º Bimestre: " || ttlo=" Informe a Média: "
read -p "$ttlo" temp ;
nota[$n]="$temp";
done
media=${nota[4]};unset nota[4];alvo=$((media*4));
printf " $lin\n Calculando:\n";
for ((n=1;n<=30;n++)) { echo -en " ${lin:0:$n}\r";sleep 0.03125;};echo;
soma=$(awk '{printf "%.2f",($1+$2+$3)}' <<< "${nota[@]}")
stt=$(bc <<< "${soma} < ${alvo}")
if ((${stt} > 0));then
echo " Precisa de: $(awk '{printf "%.2f",($1-$2)}' <<< "$alvo $soma") pontos"
else
printf " Aprovado:\n Pontos: $soma\n Media: $(bc <<< "scale=2;$soma/4")\n"
fi
printf " ${lin}\n";



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



12. Re: decimais da entrada e saída [RESOLVIDO]

Nicolas Bauermann
UmMeroUsuario

(usa Debian)

Enviado em 03/12/2021 - 10:51h

Estava fazendo testes com uns combos de echo+bc e awk+printf, e a saída foi essa (com o modo debug do bash):


[...]
+ falta=6.8
#ou seja, ele calculou o quanto falta
+ [[ 6.8 -gt 0 ]]
./notas.sh: linha 20: [[: 6.8: erro de sintaxe: operador aritmetico invalido (token de erro é ".8")
[...]


A linha que gerou essa saída é a seguinte:

[[ 6.8 -gt 0 ]] && awk '{printf "falta %.1f pontos\n",$1}' <<< $falta || echo "está passado \O/"

Antes testei com o echo, mas deu erro também



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts