【问题标题】:Addition/subtraktion/multiplikation of floats in bash with bc -l使用 bc -l 对 bash 中的浮点数进行加法/减法/乘法运算
【发布时间】:2018-08-17 15:51:13
【问题描述】:

这么简单的任务我遇到了麻烦...

请在下面找到相关代码:

loewdin_fuk=$(echo  $line_fukui|awk '{print $4}')

nbo_fuk=$(echo  $line_fukui|awk '{print $5}') 

echo "loewdin_fuk $loewdin_fuk nbo_fuk $nbo_fuk"

aver_fuk=$(($loewdin_fuk + $nbo_fuk))

\#aver_fuk=$(echo "scale=4; 0.5*($loewdin_fuk $nbo_fuk)" | bc -l)

输出是:

loewdin_fuk +0.1662 nbo_fuk +0.1865

./collectFukui.sh: line 151: +0.1662 + +0.1865: syntax error: invalid 

arithmetic operator (error token is ".1662 + +0.1865")

使用命令行:

aver_fuk=$(echo "scale=4; 0.5*($loewdin_fuk $nbo_fuk)" | bc -l) 

导致以下输出:

loewdin_fuk +0.1662 nbo_fuk +0.1865

(standard_in) 1: syntax error

我不明白怎么了...提前谢谢你!

最好的,

【问题讨论】:

  • bash 无法处理浮点数。在awk 中做所有事情。
  • echo "$line" | awk '{print "Average: ", ($4 + $5)/2.0}'
  • 非常感谢。它有效!

标签: bash math scripting bc


【解决方案1】:

这里的问题是bc 不认为+ 是一元运算符。所以+0.1662 +0.1865 是无效的语法。 (如果第一个数字是负数就可以了,因为- 是一元运算符。)

所以如果你想使用bc,你需要这样做:

aver_fuk=$(echo "scale=4; 0.5*(0$loewdin_fuk $nbo_fuk)" | bc -l)

无论$loewdin_fuk 是否以符号字符开头,都可以在前面加上不带空格的 0。如果您在两者之间放置一个空格,它将适用于具有显式符号字符的值,但对于没有符号的值会失败。

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多