如何在 Bash 中比较负浮点数

如何在 Bash 中比较负浮点数

我们测试了我们的脚本,发现它在 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 中轻松完成。

相关内容