【发布时间】:2013-12-09 22:05:52
【问题描述】:
在 bash 脚本中,我有 1 个这样的脚本:
n1 = 1
n0 = 59
# compute p1
p1=$((n1/n0))
echo "p1 = $p1"
我希望我的输出是 p1 = 1/59 = 0.016949153 但实际上,输出是 p1 = 0
那么,如何解决它。请帮帮我
【问题讨论】:
在 bash 脚本中,我有 1 个这样的脚本:
n1 = 1
n0 = 59
# compute p1
p1=$((n1/n0))
echo "p1 = $p1"
我希望我的输出是 p1 = 1/59 = 0.016949153 但实际上,输出是 p1 = 0
那么,如何解决它。请帮帮我
【问题讨论】:
BASH 不做任何浮点数学运算。为此,您可以使用 bc 或 awk。
例如::
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
【讨论】:
scale=5的更新
我想补充
p1=$(python -c "print $n1*1.0/$n0")
【讨论】:
您可以使用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
在这两种情况下,您都可以设置要使用的比例(通过在bc 中设置scale 或在dc 中使用k 命令)。
【讨论】: