Converter um float no próximo número inteiro em vez do mais próximo?

Converter um float no próximo número inteiro em vez do mais próximo?

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 ifdeclaraçã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 bcrecursos 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 awke somando 0.5ao resultado, .fele 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.5em vez disso

informação relacionada