Verificando um valor de ponto flutuante dentro de um intervalo

2

Estou apenas imaginando como posso verificar se um valor de ponto flutuante está dentro de um determinado intervalo usando "bc" e as instruções condicionais no bash. Agradecemos antecipadamente

Por exemplo, quero saber se o 17,2 está dentro do intervalo de 17,5 a 18,2.

Aprendi recentemente que posso usar bc para verificar uma declaração como esta:

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

Tentou fazer isso if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]

Mas mantenha um erro de sintaxe e não tenha certeza se essa é a expressão ou a sintaxe correta.

    
por LjinKazama 11.06.2015 / 15:17

2 respostas

4

Você não pode usar && dentro de colchetes simples. Você tem diferentes opções:

  1. Use -a dentro de [ ... ] .

    if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
    
  2. Use colchetes duplos [[ ... ]] que suportam && .

    if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
    
  3. Use duas condições [ ... ] separadas por && .

    if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
    
  4. Você pode usar a comparação de strings no resultado das duas expressões

    [[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
    
  5. bc compreende && , também:

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

Eu prefiro 5 .

    
por choroba 11.06.2015 / 15:24
1

O Bash não pode lidar com carros alegóricos.

Primeiro, percebemos se estão ou não no intervalo. Se isso for verdade (1), então o número está no intervalo:

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

Então, verificamos se é verdade com um if.

if [ $test -eq 1 ]
then
    echo true
else
    echo false
fi
    
por Tim 11.06.2015 / 15:29