我遇到了一个错误,可能是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