2012-10-25 11 views
5

Jak mogę uzyskać prawidłowy wynik z tego skryptu Bash?Arytmetyka arytmetyki Bash z wartością zmiennoprzecinkową

#!/bin/bash 
echo $((1/2)) 

Otrzymuję 0 jako wynik! Więc starałem się używać tych, ale bez powodzenia:

$ echo $((1/2.0)) 
bash: 1/2.0 : syntax error: invalid arithmetic operator (error token is ".0 ") 
$ echo $((1.0/2)) 
bash: 1.0/2 : syntax error: invalid arithmetic operator (error token is ".0/2 ") 

Odpowiedz

11

nie jest odpowiednim narzędziem w spokoju korzystać pływaków, należy użyć z nim:

bc <<< "scale=2; 1/2" 
.50 

Jeśli trzeba przechowywać wynik w zmiennej:

res=$(bc <<< "scale=2; 1/2") 
echo $res 
2

Natknąłem się na niezły kod, który jest w pewnym stopniu wykorzystujący sugestię sputnick wykonane , Ale owija go wokół bash funkcję:

function float_eval() 
{ 
    local stat=0 
    local result=0.0 
    if [[ $# -gt 0 ]]; then 
     result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null) 
     stat=$? 
     if [[ $stat -eq 0 && -z "$result" ]]; then stat=1; fi 
    fi 
    echo $result 
    return $stat 
} 

Następnie można go używać jako:

c=$(float_eval "$a/$b") 
Powiązane problemy