如何在bash中将浮点数四舍五入到小数点后3位

Ena*_*san 2 floating-point bash floating-point-precision floating-point-conversion

我是一个新的bash学习者。如果需要,我想打印作为输入给出的表达式的结果,3 digits小数点后带有四舍五入。我可以使用以下代码,但它不会四舍五入。假设我5+50*3/20 + (19*2)/7为以下代码提供输入,则给定的输出为17.928. 实际结果是17.92857...。因此,它是truncating而不是四舍五入。我想把它四舍五入,这意味着输出应该是 17.929. 我的代码:

read a
echo "scale = 3; $a" | bc -l
Run Code Online (Sandbox Code Playgroud)

等效C++代码可以是(在main函数中):

float a = 5+50*3.0/20.0 + (19*2.0)/7.0;
cout<<setprecision(3)<<fixed<<a<<endl;
Run Code Online (Sandbox Code Playgroud)

nil*_*ils 7

关于什么

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

哪个输出

a         = 17.92857142857142857142
a_rounded = 17.929
Run Code Online (Sandbox Code Playgroud)

?