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

时间:2015-06-29 20:22:13

标签: bash floating-point floating-point-precision floating-point-conversion

我是一名新的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;

3 个答案:

答案 0 :(得分:2)

您可以使用awk:

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

%.3f输出格式将数字向上舍入为3个小数点。

答案 1 :(得分:1)

怎么样?
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

答案 2 :(得分:1)

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

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