Bash script: Redondear número flotante
Otra entrada de bash script, que últimamente lo tengo que tocar mucho. Voy a explicar algunas formas de poder redondear un número flotante a un entero, algo que en algunas ocasiones se hace indispensable.
La primera alternativa que tenemos es usar directamente el comando printf que viene en las bash utils. Sin embargo tenemos un problema bastante gordo si queremos usar directamente dicho comando, y es que tiene en cuenta la coma “,” como el indicador que separa la parte entera de la parte decimal de un valor. Es decir si escribimos esto:
printf "%.0f" 5.6 bash: printf: 5.6: número inválido 0
El terminal bash no reconocerá el número. Sin embargo si lo escribimos así
printf "%.0f" 5,6 6
Se redondeará el número correctamente. Pero lo realmente curioso es que esto solamente ocurre si intentamos ejecutar el comando desde una terminal. Si lo hacemos desde un script, nos permite trabajar con flotantes normales sin problemas!
#!/bin/bash printf "%.0f" 5,6
La segunda alternativa es usar el comando printf dentro de awk.
echo "5.6" | awk '{printf ("%.0f", $1)}'
Y por último mediante el comando bc, haciendo uso de una triquiñuela similar a la que os conté en cierta ocasión para redondear valores con C/C++.
echo "($float+0.5)/1" | bc
En estas dos últimas alternativas hay que hacer uso del comando echo para pasar el valor que queremos redondear, pero no creo que sea computacionalmente muy costoso ¿verdad? xD. Hay otras formas de redondear valores, pero para mi gusto demasiado engorrosas. Así que escoger la que más os guste de estas;).
Enlaces:
- http://www.bash-hackers.org/wiki/doku.php/commands/builtin/printf
- http://www.linuxforums.org/forum/linux-programming-scripting/91522-rounding-numbers-bash.html
- http://www.alecjacobson.com/weblog/?p=256
loading...
Últimos comentarios