【问题标题】:Calculate arithmetic calculation on floating numbers in shell scripting在 shell 脚本中计算浮点数的算术计算
【发布时间】:2021-09-01 05:39:06
【问题描述】:

我创建了 5 个仅包含浮点数(包含正数和负数)的数组。

以下是声明的数组:

  • 资产
  • 报告
  • 借记
  • 学分
  • 附属
  • 贷款

我需要对数组执行以下公式,但它不起作用。
还有其他方法吗?

for((i =1 ; i <(#$assets[@]}; i++));do
echo ${assets[i]} - ( ${reported[i]} + ( ${affiliate[i]} * -1 ) + ${loans[i]} + (${credit[i]} - ${debit[i]})) | bc >> test.log

【问题讨论】:

  • echo "..." | bc &gt;&gt; test.log
  • @blackhole : 还有其他方法吗。请协助Stack Overflow 不鼓励有关建议和意见的问题,所以我将我的意见作为评论告诉你,而不是答案:我会考虑使用可以进行浮点运算的 shell(例如 zsh) ,或使用内置支持浮点的编程语言(Ruby、Perl、....)。
  • 另外,您还有语法错误。通过 shellcheck.net 运行它。我想你的意思是i &lt; ${#assets[@]}

标签: arrays bash shell arithmetic-expressions


【解决方案1】:

第一件事:不能将 bash 变量直接视为浮点值。数字 bash 值只是整数。

您可以使用其他工具来执行浮点计算。 也就是说,您可以像在您的 sn-p 代码中那样使用“bc”。

您的问题很可能是由 bash 解释且未发送到“bc”的括号。您必须先将计算构建为字符串,然后再将其传递给 bc。

我会这样写:

echo "${assets[i]} - ( ${reported[i]} + ( ${affiliate[i]} * -1 ) + ${loans[i]} + ( ${credit[i]} - ${debit[i]} ))" | bc

【讨论】:

  • @JohnKugelman 你是对的。我最初认为双引号会让 bash 以某种方式解释括号,但事实并非如此。所以你的解决方案更好。
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多