在bash中,我如何划分两个变量并输出四舍五入到5位小数的答案?
我把两个变量作为输入,除以它们后,我想把输出四舍五入到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
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当然,我刚刚做到了!