Bash:
Rounding numbers
How to:
Here’s the lowdown on rounding in Bash:
# Round down using 'floor' with bc
echo "scale=0; 3.49/1" | bc
# Round up using 'ceiling' with bc
echo "scale=0; 3.01/1" | bc -l
# Round to nearest whole using printf
printf "%.0f\n" 3.49
# A trick to round to the nearest whole using bc
echo "(3.49+0.5)/1" | bcSample outputs—straight from terminal’s mouth:
3 # Rounded down (floor)
4 # Rounded up (ceiling)
3 # Rounded to nearest (with printf)
3 # Rounded to nearest (with bc)Deep Dive
Back in the day, there was no bc or printf in Bash scripts to do the math magic. Old-schoolers had to rely on external tools or crafty workarounds. Now, bc lets you do precision math. Keep in mind, bc doesn’t round by default—it floors. The scale part sets the decimal point action.
Alternatives? You could use awk for rounding without swapping to bc or wrangle with perl for heftier math needs. For the masochistic, go pure Bash with, let’s say, iterative string manipulation – but why?
As for details, bc doesn’t just round, it does loads of math stuff—scale it, sine it, sqrt it, you name it. With printf, it’s more about formatting text, but hey, it rounds numbers, so we’re not complaining.
See Also
For those hungry for more:
- GNU
bcmanual: https://www.gnu.org/software/bc/manual/html_mono/bc.html - Bash
printfcommand: https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-printf - AWK user’s guide (for rounding and other text processing): https://www.gnu.org/software/gawk/manual/gawk.html
- More Bash math, scripting, and number tricks: https://mywiki.wooledge.org/BashFAQ/022