
O contexto é que existem 2 variáveis que são divididas em umponto flutuanteresultado assim:
printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333
Como posso sempre arredondar para opróximointeiro, ou seja21? Não se trata de arredondar um valor acima de 20,5 para 21, ou seja,mais próximointeiro. Estou perguntando porque quero que um valor seja exatamente o número inteiro ou o próximo número inteiro, se estiver acima de alguma forma. Então, como posso avaliar isso? Com uma if
declaração? Se eu colocar umflutuadoraí o shell reclama que espera um número inteiro. Não entendo completamente como aproveitar as informações em perguntas e respostas comoEstepara efetuar uma conversão "para cima" para o próximo número inteiro. Algo que estou perdendo?
Responder1
Você pode usar bc
recursos para isso:
echo "a=305; b=15; if ( a%b ) a/b+1 else a/b" | bc
Responder2
Tentar:
ceil() {
echo "define ceil (x) {if (x<0) {return x/1} \
else {if (scale(x)==0) {return x} \
else {return x/1 + 1 }}} ; ceil($1)" | bc
}
Então:
$ ceil 5.1
6
$ ceil 5.5
6
$ ceil 5.9
6
Responder3
para inteiros positivos:
a=305
b=15
echo $((a%b?a/b+1:a/b))
21
Responder4
Através awk
e somando 0.5
ao resultado, .f
ele será arredondado para o número mais próximo sozinho.
awk 'BEGIN{printf("%.f\n", (305/15)+0.5)}'
21
Se você quiser que sejachãofunção, use -0.5
em vez disso