如何在bash脚本中修复1/59 = 0.016949153而不是1/59 = 0

时间:2013-11-25 09:36:31

标签: bash output

在bash脚本中,我有一个这样的脚本:

n1 = 1
n0 = 59

# compute p1
p1=$((n1/n0))
echo "p1 = $p1"

我想我的输出是p1 = 1/59 = 0.016949153 但实际上,输出是p1 = 0

那么,如何修复它。请帮帮我

3 个答案:

答案 0 :(得分:5)

BASH不做任何浮点数学运算。您可以使用bcawk

对于ex ::

p1=$(bc -l <<< "scale=5; $n1/$n0")
echo "$p1"
.01694

更新:使用awk:

awk -v n1=$n1 -v n0=$n0 'BEGIN{printf("%.5f\n", (n1/n0))}'
0.01695

答案 1 :(得分:2)

您可以使用bc来获取任意精度数学:

pax> n1=355 ; n0=113
pax> p1=$(echo "scale=50;$n1/$n0" | BC_LINE_LENGTH=9999 bc) ; echo $p1
3.14159292035398230088495575221238938053097345132743

行长会阻止bc执行令人烦恼的换行行为以获得更长的结果。

如果你有像我这样的反向抛光心态,你也可以使用dc

pax> n1=355 ; n0=113
pax> echo 50 k $n1 $n0 / p | dc
3.14159292035398230088495575221238938053097345132743

在这两种情况下,您都可以设置要使用的比例(在scale中设置bc或在k中使用dc命令。)

答案 2 :(得分:2)

我想添加

p1=$(python -c "print $n1*1.0/$n0")