Bash中具有浮点值的C风格算术[重复]

Posted

技术标签:

【中文标题】Bash中具有浮点值的C风格算术[重复]【英文标题】:C style arithmetic with floating point values in Bash [duplicate] 【发布时间】:2012-10-15 02:53:37 【问题描述】:

我怎样才能从这个 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 ")

【问题讨论】:

【参考方案1】:

bash 不是单独使用 floats 的正确工具,您应该使用 bc 和它:

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

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

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

【讨论】:

【参考方案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")

【讨论】:

以上是关于Bash中具有浮点值的C风格算术[重复]的主要内容,如果未能解决你的问题,请参考以下文章

解释器风格学习

std::sort 对 c 风格的字符串进行排序,而不复制字符串 [重复]

Google 发明新语言:Jsonnet

C 编程最佳实践(书写风格)

C 风格包含在 Firebug 或 Chrome 控制台中吗? [复制]

使用 os.system("bash code") 在 Python 脚本中调用 bash 命令是一种好的风格吗? [关闭]