Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中,我如何划分两个变量并输出四舍五入到5位小数的答案?_Bash_Shell_Arithmetic Expressions_Bc - Fatal编程技术网

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

在bash中,我如何划分两个变量并输出四舍五入到5位小数的答案?,bash,shell,arithmetic-expressions,bc,Bash,Shell,Arithmetic Expressions,Bc,我把两个变量作为输入,除以它们后,我想把输出四舍五入到5位小数。我试过这种方法-> sum=12 n=7 output=$("scale=5;sum/n"|bc) echo $output 我的代码没有显示任何输出。我能做什么 测试用例: 如果sum=3345699和n=1000000,则(sum/n)=3.345699,应将其更改为3.34570 awk 'BEGIN{sum=12;n=7;printf "%0.5f\n", sum/n}' 1.71429 在此解决方案中,awk使用pri

我把两个变量作为输入,除以它们后,我想把输出四舍五入到5位小数。我试过这种方法->

sum=12
n=7
output=$("scale=5;sum/n"|bc)
echo $output
我的代码没有显示任何输出。我能做什么

测试用例:


如果
sum=3345699
n=1000000
,则
(sum/n)=3.345699
,应将其更改为
3.34570

awk 'BEGIN{sum=12;n=7;printf "%0.5f\n", sum/n}'
1.71429
在此解决方案中,awk使用
printf
将小数点四舍五入到5位。如果希望传递bash变量,请使用以下命令:

 awk -v sum=12 -v n=7 'BEGIN{printf "%0.5f\n", sum/n}'
 1.71429
另一方面,awk在算术方面似乎很好:

sh-4.1$  time echo "scale=5; 12/7" | bc ;  time echo "scale=5;($sum/$n)"|bc;time awk 'BEGIN{sum=12;n=7;printf "%0.5f\n", sum/n}'
1.71428

real    0m0.004s
user    0m0.001s
sys     0m0.002s
1.71428

real    0m0.004s
user    0m0.001s
sys     0m0.001s
1.71429

real    0m0.002s
user    0m0.001s
sys     0m0.000s
sh-4.1$

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

$ 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
就有足够的小数来正确地进行舍入。
sum
n
,这些都是bash变量。您应该添加
$
以获取它们的值。因此,解决方案应该是:

echo "scale=5;($sum/$n)"|bc
1.71428

sum=12;n=7;输出=$(b难道你不必说
$sum/$n
?@cnicutar绝对。谢谢,更正了!@jbsu32你给
sum
n
什么值才能得到
(sum/n)=3.345699
sum=3345699
n=1000000
@jbsu32当然,我刚刚做到了!