我正在服用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上运行上述代码时出现的)
答案 0 :(得分:1)
bc
用scale=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