![如何在 Bash 中比较负浮点数](https://linux22.com/image/1358568/%E5%A6%82%E4%BD%95%E5%9C%A8%20Bash%20%E4%B8%AD%E6%AF%94%E8%BE%83%E8%B4%9F%E6%B5%AE%E7%82%B9%E6%95%B0.png)
我们测试了我们的脚本,发现它在 Bash 中负浮点比较失败。我们做错了什么?
$F1=10000000000
$F2=300
FLP=$(bc <<< "scale=5; ($F2 - $F1)/$F2 * 100")
if [ $FLP -eq "1" ]; then
echo " greater"
else
echo "smaller"
fi
它不断打印“大于”-99.99900
感谢所有人的帮助
答案1
#!/bin/bash
F1=$1
F2=$2
FLP=$(bc <<< "scale=5; (${F2} - ${F1})/${F2} * 100")
if (( $(echo "${FLP} 1" | awk '{print ($1 > $2)}') )); then
echo "greater"
else
echo "smaller"
fi
摘自:https://stackoverflow.com/questions/11237794/how-to-compare-two-decimal-numbers-in-bash-awk
答案2
Bash 帮助-eq
指出它会比较INTEGER
类型。 中不支持浮点数[
。
我建议你使用bc
进行计算——为什么不使用bc
进行比较?例如,if A < B
你可以测试而不是if B-A > 0
,其中减法由 完成bc
,并且信号检查可以在 bash 中轻松完成。