bash - 在 bash 中,我如何划分两个变量并输出四舍五入到 5 位小数的答案?

标签 bash shell arithmetic-expressions bc

<分区>

我将两个变量作为输入,将它们相除后,我希望将输出四舍五入到 5 位小数。我试过这种方式 ->

sum=12
n=7
output=$("scale=5;sum/n"|bc)
echo $output

我的代码没有显示任何输出。我能做什么??

测试用例:

如果sum=3345699n=1000000那么(sum/n)=3.345699,应该改成3.34570

最佳答案

这里的问题是您错过了 echo(或 printf 或任何其他东西)来向 bc 提供数据:

$ echo "scale=5; 12/7" | bc
1.71428

此外,正如 cnicutar 在评论中指出的那样,您需要使用 $ 来引用变量。 sum是一个字符串,$sum是变量sum的值。
总之,您的代码段应该是这样的:

sum=12
n=7
output=$(echo "scale=5;$sum/$n" | bc)
echo "$output"

这将返回 1.71428

否则,使用 "scale=5;sum/n"|bc 时,您只是在管道分配并使 bc 失败:

$ "scale=5;sum/n"|bc
bash: scale=5;sum/n: No such file or directory

然后你说你想要对结果进行四舍五入,这现在不会发生:

$ sum=3345699
$ n=1000000
$ echo "scale=5;($sum/$n)" | bc
3.34569

这需要一种不同的方法,因为 bc 不四舍五入。您可以将 printf%.Xf 一起使用以四舍五入为 X 十进制数,这样做:

$ printf "%.5f" "$(echo "scale=10;$sum/$n" | bc)"
3.34570

看,我给它一个很大的比例,这样 printf 就有足够的小数来正确舍入。

关于bash - 在 bash 中,我如何划分两个变量并输出四舍五入到 5 位小数的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343811/

相关文章:

linux - Bash - 使用 sed 更改配置文件

linux - 从 bash shell 编辑 XML 文件

bash - Bash 脚本中的等待和循环条件

Python 从子脚本输出到子进程中的控制台

linux - 使用 awk 提取 key 的 BASH 脚本

linux - 在 Ubuntu 下复制和重命名文件(.bin 到 .pdf)的脚本

arrays - Rust ndarray 算术运算意外类型不匹配

bash - 当 'let' 表达式的计算结果为 0 时,为什么带有 -e 选项的 Bash 退出?

string - 如何将String评估为表达式以在Rust中对String进行算术运算,以便在用户在控制台上键入3 +1时得到4

linux - 使用脚本外壳创建多个文件