检查范围内的浮点值

检查范围内的浮点值

我只是想知道如何使用“bc”和 bash 中的条件语句检查浮点值是否在某个范围内。提前致谢

例如,我想知道 17.2 是否在 17.5 至 18.2 范围内。

最近了解到我可以使用 bc 来检查这样的语句:

if [ $(bc <<< "$result > 17.5") -eq 1 ]

曾尝试过if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]

但总是出现语法错误,而且不确定这是否是正确的表达式或语法。

答案1

您不能&&在单方括号内使用。不过,您还有其他选择:

  1. -a在 内部使用[ ... ]

    if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
    
  2. [[ ... ]]使用支持双方括号&&

    if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
    
  3. [ ... ]使用分隔的两个条件&&

    if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
    
  4. 您可以对两个表达式的结果使用字符串比较

    [[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
    
  5. bc&&也理解:

    if [[ $(bc <<< "$result > 17.5 && $result <= 18.2") == 1 ]]
    

我更喜欢5

答案2

Bash 无法处理浮点数。

首先我们要知道它们是否在范围内。如果为真 (1),则该数字在范围内:

test=$(echo "17.5<$result<18.2" | bc)

然后我们用 if 检查它是否正确。

if [ $test -eq 1 ]
then
    echo true
else
    echo false
fi

相关内容