【问题标题】:Handling Floating Point Number in Bash [duplicate]在 Bash 中处理浮点数 [重复]
【发布时间】:2016-09-28 15:13:24
【问题描述】:

有人可以帮助我处理我在 bash 中需要的计算吗?

目前我有以下:

Size=$((IPS * DataPages / (1024 * 1024 * 1024) * 1.05))

但在尝试执行时出现以下错误:

./buffer: line 20: IPS * DataPages / (1024 * 1024 * 1024) * 1.05: syntax error: invalid arithmetic operator (error token is ".05")

我愿意使用其他替代方法,例如 print 或 awk 甚至 bc,但我需要一些指导。

【问题讨论】:

    标签: linux bash awk printing bc


    【解决方案1】:

    bash 不支持浮点运算。为此使用bc。要在bc 中启用浮点运算,请传递--mathlib(或-l)选项:

    IPS=2
    DataPages=3
    bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)"
    

    要将其捕获到 shell 变量中,请使用进程替换:

    ...
    Size=$(bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)")
    

    【讨论】:

      【解决方案2】:

      (( )) 不支持浮点运算。使用 bc 或 awk。

      使用 bc

      Size=$( echo "scale=2; $IPS * $DataPages / (1024 * 1024 * 1024) * 1.05 " | bc ) 
      # scale is for number of digits after the floating point
      

      使用 awk

      Size=$( awk -v ips="$IPS" -v dp="$DataPages" 'BEGIN{size=ips * dp/ (1024 * 1024 * 1024) * 1.05; printf "%0.02f",size}' )
      

      【讨论】:

        猜你喜欢
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多