
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 if
declaració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 bc
funciones 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 awk
y sumar 0.5
al resultado .f
lo 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.5
en su lugar