¿Convertir un flotante al siguiente entero superior en lugar del más cercano?

¿Convertir un flotante al siguiente entero superior en lugar del más cercano?

El contexto es que hay 2 variables que se dividen en unapunto flotanteresultado así:

printf "%0.5f\n" $(echo 305/15 | bc -l)
20.33333

¿Cómo puedo redondear siempre alpróximoentero es decir21? No se trata de redondear un valor superior a 20,5 a 21, es decirmás cercanoentero. Lo pregunto porque quiero que un valor sea exactamente el número entero o el siguiente número entero si está por encima de alguna manera. Entonces, ¿cómo puedo evaluar eso? ¿Con una ifdeclaración? si pongo unflotarallí el shell se queja de que espera un número entero. No entiendo completamente cómo aprovechar la información en una sesión de preguntas y respuestas comoÉstepara efectuar una conversión "hacia arriba" al siguiente número entero. ¿Algo que me falta?

Respuesta1

Puedes usar bcfunciones para eso:

echo "a=305; b=15; if ( a%b ) a/b+1 else a/b" | bc

Respuesta2

Intentar:

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
}

Entonces:

$ ceil 5.1
6
$ ceil 5.5
6
$ ceil 5.9
6

Respuesta3

para números enteros positivos:

a=305
b=15
echo $((a%b?a/b+1:a/b))
21

Respuesta4

Repasar awky sumar 0.5al resultado .flo redondeará al número más cercano por sí solo.

awk 'BEGIN{printf("%.f\n", (305/15)+0.5)}' 
21

Si quieres supisofunción, use -0.5en su lugar

información relacionada