# How to round a floating point number upto 3 digits after decimal point in bash

I am a new `bash` learner. I want to print the result of an expression given as input having `3 digits` after decimal point with rounding if needed.

I can use the following code, but it does not round. Say if I give `5+50*3/20 + (19*2)/7` as input for the following code, the given output is `17.928`. Actual result is `17.92857...`. So, it is truncating instead of rounding. I want to round it, that means the output should be `17.929`. My code:

``read aecho "scale = 3; \$a" | bc -l``

Equivalent `C++` code can be(in `main` function):

``float a = 5+50*3.0/20.0 + (19*2.0)/7.0;cout<<setprecision(3)<<fixed<<a<<endl;``

What about

``````a=`echo "5+50*3/20 + (19*2)/7" | bc -l`
a_rounded=`printf "%.3f" \$a`
echo "a         = \$a"
echo "a_rounded = \$a_rounded"
``````

which outputs

``````a         = 17.92857142857142857142
a_rounded = 17.929
``````

?

You can use awk:

``````awk 'BEGIN{printf "%.3f\n", (5+50*3/20 + (19*2)/7)}'
17.929
``````

`%.3f` output format will round up the number to 3 decimal points.