<分区>
我将两个变量作为输入,将它们相除后,我希望将输出四舍五入到 5 位小数。我试过这种方式 ->
sum=12
n=7
output=$("scale=5;sum/n"|bc)
echo $output
我的代码没有显示任何输出。我能做什么??
测试用例:
如果sum=3345699
和n=1000000
那么(sum/n)=3.345699
,应该改成3.34570
。
<分区>
我将两个变量作为输入,将它们相除后,我希望将输出四舍五入到 5 位小数。我试过这种方式 ->
sum=12
n=7
output=$("scale=5;sum/n"|bc)
echo $output
我的代码没有显示任何输出。我能做什么??
测试用例:
如果sum=3345699
和n=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/