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