bash + como calcular a porcentagem do número [duplicado]

0

como calcular a porcentagem do número

por exemplo, definimos

number=248

e queremos saber quais são os 80% de $ number

então como calcular isso em bash?

saída esperada 198 (exatamente é 198.4 mas queremos arredondar para baixo com piso)

    
por yael 31.01.2018 / 21:56

4 respostas

2

bash não pode fazer a matemática de ponto flutuante, mas você pode fingir coisas como essa se não precisar de muita precisão:

$ number=248
$ echo $(( number*80/100 ))
198
    
por 31.01.2018 / 22:08
2

O próprio Bash não consegue lidar com a matemática de ponto flutuante. A melhor aposta é usar bc assim:

$ bc <<<"248*80/100"
198

O shell (bash, sh) é capaz de calcular apenas inteiros:

$ bash -c 'echo $((248*80/100))'
198

O ksh93 é capaz de lidar com matemática de ponto flutuante:

$ ksh -c 'echo $((248*0.8))'
198.4

E com um formato de 0 decimais:

$ ksh -c 'printf "%.0f\n" "$((248*0.8))"'

O zsh faz isso de maneira diferente:

$ zsh -c 'echo $((248*0.8))'
198.40000000000001

Mas vai cair para o valor correto se formatado:

$ zsh -c 'printf "%.0f\n" "$((248*0.8))"'
198

Além disso, o awk pode fazer isso:

$ awk -vn=248 'BEGIN{print(n*0.8)}'
198.4

Ou com zero decimais:

$ awk -vn=248 'BEGIN{printf("%.0f\n",n*0.8)}'
198
    
por 31.01.2018 / 21:59
0

Com a expressão awk :

$ number=248
$ awk -v n="$number" 'BEGIN{ print int(n*0.8) }'
198
    
por 31.01.2018 / 22:03
0

Assumindo que p e n sejam positivos e p*n + 100 não transbordem o número inteiro máximo, p por cento de n é

arredondando para baixo:

$(( p*n / 100 )) 

arredondamento para o mais próximo, meio round up:

$(( (p*n+50) / 100 )) 

arredondamento:

$(( (p*n+99) / 100 )) 
    
por 31.01.2018 / 22:19