【问题标题】:How to fix 1/59=0.016949153 without 1/59=0 in bash script [duplicate]如何在 bash 脚本中修复 1/59=0.016949153 而没有 1/59=0 [重复]
【发布时间】: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 无法处理浮点数。您可以将其乘以例如如果您想要 3 位小数的精度,则为 1000,然后相应地打印它。不过最好使用awk。

标签: bash output


【解决方案1】:

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

【讨论】:

  • 如果我希望我的输出从 .01694915254237288135 更改为 .01695。我该怎么办?谢谢
  • @TrungTrung:查看使用scale=5的更新
  • 非常感谢。我刚刚解决了这个问题:)
【解决方案2】:

我想补充

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

【讨论】:

    【解决方案3】:

    您可以使用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 命令)。

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多