2012-10-25 16 views
5

Làm cách nào để có kết quả phù hợp từ tập lệnh bash này?Số học kiểu Bash C có giá trị dấu phảy động

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

Tôi nhận được 0 là kết quả! Vì vậy, tôi cố gắng sử dụng những nhưng không thành công:

$ 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 ") 

Trả lời

11

không phải là công cụ thích hợp một mình để sử dụng nổi, bạn nên sử dụng với nó:

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

Nếu bạn cần lưu trữ các dẫn đến một biến:

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

Tôi từng gặp một đoạn mã đẹp, phần nào sử dụng gợi ý sputnick , Nhưng kết thúc tốt đẹp xung quanh nó một chức năng bash:

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 
} 

Sau đó, bạn có thể sử dụng nó như:

c=$(float_eval "$a/$b") 
Các vấn đề liên quan