bash - 在 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运行上述代码时,问题就出现了)
解决方案
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
推荐阅读
- python - 从数据框中删除重叠/相同的事务
- python - 为什么 dj-database-url 给我一个错误:需要一个类似字节的对象,而不是“str”,我该如何解决这个问题?
- ios - Swift Map ARRAYS 按日期数组
- python - Python映射对象在减少后变为空
- eclipse - 为什么 Eclipse 拒绝将 Java 类作为 AWS SAM Local 而不仅仅是 Java 运行?
- d3.js - d3.js 在聚集图表上格式化数据标签
- c# - 如何从另一个表单填充 datagridview 单元格?C#
- c# - 从应用商店下载时,Xamarin.iOS 应用在使用 iPhone5 启动时崩溃。DYLD,库未加载错误。-+
- symfony - Symfony 4 学说即使在开发环境中也使用缓存
- java - 扫描文本文件时出现 NetBeans 错误