在Bash中使用C风格的浮点运算

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 ")
2个回答

13

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

bc <<< "scale=2; 1/2"
.50
如果您需要将结果存储在变量中:
res=$(bc <<< "scale=2; 1/2")
echo $res

2

我曾经偶然发现了一段不错的代码,它有点利用了sputnick所提出的建议,但是将其包装在一个函数中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接