首页 > 解决方案 > 在 bash 中四舍五入

问题描述

在hackerrank上接受挑战目标是:

读取(int) N ; 然后读取 N个整数并将它们的平均值打印 到小数点后三位。

这是代码:

#!/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

所以问题是无论如何都要让它正确正确的四舍五入),或者它只是这样工作吗?

(当为hackerrank挑战的Testcase2运行上述代码时,问题就出现了)

标签: bashshellrounding

解决方案


bc用 向下取整scale=x
你可以打印:

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

或者通过添加 0.0005 来增加一些棘手的 bc:

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

推荐阅读