como comparar pontos flutuantes negativos no bash

0

Testamos nosso script e ele falha na comparação negativa de pontos flutuantes no bash. O que estamos fazendo errado?

$F1=10000000000
$F2=300
FLP=$(bc <<< "scale=5; ($F2 - $F1)/$F2 * 100")
if [ $FLP -eq "1" ]; then
    echo " greater"
else
    echo "smaller"
fi

Ele continua imprimindo "maior" com -99,99900

Obrigado a todos pela ajuda

    
por chz 06.04.2013 / 03:10

2 respostas

0

#!/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

Adoptado de: link

    
por 06.04.2013 / 05:10
0

A ajuda da Bash para -eq declara que compara INTEGER types. Não há suporte a ponto flutuante em [ .

O que eu recomendo é que você já esteja usando bc para fazer o cálculo. Por que você não usa bc para fazer a comparação? Como em vez de if A < B , você pode testar if B-A > 0 , onde a subtração é feita por bc , e a verificação do sinal pode ser feita facilmente no bash.

    
por 16.11.2015 / 12:51