使用 bc (bash) 比较两个数字时出现错误结果

使用 bc (bash) 比较两个数字时出现错误结果

我遇到了一个错误,可能是bc。我在尝试在 bash 中的脚本中比较两个数字时遇到了这个问题。事实证明,当我这样做时:

echo "1.1E-2<1.1E-1" | bc -l

它返回 1(正如预期)。

但是当我这样做时:

echo "2.1E-2<1.1E-1" | bc -l

它返回 0,但它应该返回 1(因为 0.021 小于 0.11)。

我正在使用 bc 版本 1.06.95 和 kubuntu 14.04

有人发现类似的结果吗?有人能想到解决方法吗?

答案1

bc不明白指数符号。

它可能将“E”解释为十六进制数字,但在较长的数字中,它似乎将其转换为 9(错误?),对于其他十六进制数字也是如此:

bc -l <<< E-4    # 14 - 4
10

bc -l <<< 1E-1   # 19 - 1
18

bc -l <<< F.4E2
9.492

答案2

您的解决方法

    echo "2.1*10^-2<1.1*10^-1" | bc -l

如果你想转换另一个文件的输出,你可以做类似的事情

    echo "2.1E-2<1.1E-1" | sed 's/E/*10^/g'  | bc -l 

sed你去哪里E用代替*10^接受的bc

相关内容