Bash 四舍五入到3个小数点只会截断其余的小数点

Bash 四舍五入到3个小数点只会截断其余的小数点,bash,Bash,--我上面的代码四舍五入到一个较小的值,其中我想要一个较大的值 e、 g.如果ans为4696.9466,则四舍五入为4696.946,而4696.947是我想要的。因此,建议进行任何编辑您可以通过管道将您的bc发送到printf: 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

--我上面的代码四舍五入到一个较小的值,其中我想要一个较大的值
e、 g.如果ans为4696.9466,则四舍五入为4696.946,而4696.947是我想要的。因此,建议进行任何编辑

您可以通过管道将您的
bc
发送到
printf

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
从你的例子来看:

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

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

$ echo "scale = 4; 4696.9466" | bc -l | xargs printf '%.*f\n' 3
4696,947
printf
将正确舍入。比如说,

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

可能是由于截断而不是取整造成的…当我使用变量时,不会仍然得出相同的结果比例必须等于
4
。我很高兴。如果有效,请接受答案。接受回答会通知其他用户问题已解决。
$ sum=1345
$ n=7
$ echo "$sum/$n" | bc -l
192.14285714285714285714

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