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

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

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

read a
echo "scale = 3; $a" | bc -l

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

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

你可以使用 awk:

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

%.3f 输出格式会将数字四舍五入到小数点后三位。

怎么样

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

输出

a         = 17.92857142857142857142
a_rounded = 17.929

?

尝试使用这个: 这里 bc 将提供 bash 计算器的功能,-l 将读取字符串中的每一个,最后我们只在末尾打印三位小数

read num
echo $num | bc -l | xargs printf "%.3f"