在bash脚本中,我有一个这样的脚本:
n1 = 1
n0 = 59
# compute p1
p1=$((n1/n0))
echo "p1 = $p1"
我想我的输出是p1 = 1/59 = 0.016949153 但实际上,输出是p1 = 0
那么,如何修复它。请帮帮我
答案 0 :(得分:5)
BASH不做任何浮点数学运算。您可以使用bc
或awk
。
对于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")