Ok, so I'm trying to round up an input of 17.92857
, so that it gets an input of 17.929
in bash.
My code so far is:
read input
echo "scale = 3; $input" | bc -l
However, when I use this, it doesn't round up, it returns 17.928
.
Does anyone know any solutions to this?
In case input
contains a number, there is no need for an external command like bc
. You can just use printf
:
printf "%.3f\n" "$input"
Edit: In case the input is a formula, you should however use bc
as in one of the following commands:
printf "%.3f\n" $(bc -l <<< "$input")
printf "%.3f\n" $(echo "$input" | bc -l)
To extend Tim's answer, you can write a shell helper function round ${FLOAT} ${PRECISION}
for this:
#!/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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With