bash shell floating-point decimal rounding

Redondeando números de punto flotante bash



shell floating-point (4)

En caso de que la input contenga un número, no hay necesidad de un comando externo como bc . Puedes usar printf :

printf "%.3f/n" "$input"

Edición: en caso de que la entrada sea una fórmula, debe usar bc como en uno de los siguientes comandos:

printf "%.3f/n" $(bc -l <<< "$input") printf "%.3f/n" $(echo "$input" | bc -l)

Ok, entonces estoy tratando de redondear una entrada de 17.92857 , para que obtenga una entrada de 17.929 en bash.

Mi código hasta ahora es:

read input echo "scale = 3; $input" | bc -l

Sin embargo, cuando uso esto, no se redondea, devuelve 17.928 .

¿Alguien sabe alguna solución a esto?


Puede escribir una función auxiliar de shell round ${FLOAT} ${PRECISION} para esto:

#!/usr/bin/env bash round() { printf "%.${2}f" "${1}" } PI=3.14159 round ${PI} 0 echo round ${PI} 1 echo round ${PI} 2 echo round ${PI} 3 echo round ${PI} 4 echo round ${PI} 5 echo round ${PI} 6 echo # Outputs: 3 3.1 3.14 3.142 3.1416 3.14159 3.141590 # To store in a variable: ROUND_PI=$(round ${PI} 3) echo ${ROUND_PI} # Outputs: 3.142


Un pequeño truco es agregar 0.0005 a su entrada, de esta manera tendrá su número redondeado correctamente.


si está recibiendo el error de redondeo con el número 17.928 intente esto: lea y v = echo "scale = 3; $y" |bc -l si [$ v == 17.928]; luego echo "17.929" else echo $ v fi