7

我怎样才能从这个 bash 脚本中得到正确的结果?

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

结果我得到0了!所以我尝试使用这些但没有成功:

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

2 回答 2

13

不是单独使用浮点数的正确工具,您应该使用

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

如果您需要将结果存储在变量中:

res=$(bc <<< "scale=2; 1/2")
echo $res
于 2012-10-25T00:23:27.383 回答
2

我曾经偶然发现一段很好的代码,它在某种程度上利用了 sputnick 提出的建议,但将它包装在一个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
}

然后,您可以将其用作:

c=$(float_eval "$a / $b")
于 2012-10-25T00:25:23.043 回答