bashfloating-pointfloating-point-precisionfloating-point-conversion

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 a
echo "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;

Solution

  • 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
    

    ?