四舍五入

时间:2018-07-17 08:49:00

标签: bash shell rounding

我正在服用a challenge on hackerrank目标是:

  

已读(int) N ;然后 read N 个整数并 print 将其 avg 打印到三个小数位。

代码如下:

#!/bin/bash
#file name:rdlp.sh
read N
s=0
i=1
while (($i<=$N))
     do
           read a
           s=$((s+a))
           i=$((i+1))
     done
s=$s/$N
echo  "scale=3;$s"|bc -l
fi

当我为某些输入运行代码时:

  

3#( N 的值)
  4#( N = 3 个整数)
  4
  3

然后输出为 3.666 ,但应为 3.667

因此, 问题 是可以通过正确正确舍入)获得的,或者只能那样工作吗?

(问题是在Testcase2 of the challenge at hackerrank上运行上述代码时出现的)

1 个答案:

答案 0 :(得分:1)

bcscale=x向下舍入。
您可以打印:

$ printf "%.3f\n" $(echo  "scale=1000; 11/3"|bc -l)
3.667

或添加0.0005的一些棘手的副本:

$ echo  "scale=1000; v=11/3; v=v+0.0005; scale=3; v/1" | bc -l
3.667