舍入到3个小数点只会截断其余部分

时间:2016-03-29 07:56:54

标签: bash

read n
i=0
sum=0
while [ $i -lt $n ]
do
    read X
    sum=`expr $X + $sum `
    i=`expr $i + 1 `
done
echo "scale = 3; $sum/$n" | bc -l

- 我上面的代码四舍五入到一个较小的值,我想要更大的值 例如如果ans是4696.9466,它将四舍五入到4696.946而4696.947是我想要的。所以,建议任何编辑

2 个答案:

答案 0 :(得分:0)

您可以将bc发送到printf

echo "scale = 4; $sum/$n" | bc -l | xargs printf '%.*f\n' 3 

从你的例子:

$ echo "scale = 4; 4696.9466" | bc -l | xargs printf '%.*f\n' 3
4696,947

答案 1 :(得分:0)

将脚本的最后一行从echo "scale = 3; $sum/$n" | bc -l更改为

printf %.3f $(echo "$sum/$n" | bc -l)

printf会正确地完成它。例如,

$ sum=1345
$ n=7
$ echo "$sum/$n" | bc -l
192.14285714285714285714

$ printf %.3f $(echo "$sum/$n" | bc -l)
192.143