【问题标题】:Bash assign floating point result to a variableBash将浮点结果分配给变量
【发布时间】:2017-02-20 10:55:16
【问题描述】:

我需要做一个简单的浮点运算: 我尝试同时使用 BC 和 awk 都没有成功...

remainingTime=$(((duration/numOfRevisions)*remainingRevision))
echo  "$(($remainingTime / 60)) minutes and $(($remainingTime % 60)) seconds remaining."

所有变量都是整数(duration是秒数) 我的问题是计算变量剩余时间,以便使用第二行中格式化的打印。

我在Awk的尝试

remainingTime=$(awk "BEGIN {printf \"%.2f\",${duration}/${numOfRevisions}*${remainingRevision}}‌​"

【问题讨论】:

  • bash 仅支持整数运算。如果你想要浮点数,你必须使用像awkbc 这样的语言。
  • 我尝试同时使用 BC 和 awk 都没有成功我看不出你在哪里尝试这样做。
  • 你能告诉我们你对bcawk的尝试
  • @Barmar,这是我尝试的 awk 命令 remainingTime=$(awk "BEGIN {printf \"%.2f\",${duration}/${numOfRevisions}*${remainingRevision}} ")
  • @Inian 他的 awk 代码在双引号内,所以bash 会展开变量。

标签: bash


【解决方案1】:

bash 不支持浮点运算。对于bc,如果要使用浮点值,则需要使用bc --mathlib

bc --mathlib <<< "(${duration}/${numberOfRevisions})*${remainingRevision}"

【讨论】:

  • 我尝试使用它但出现错误,似乎变量“remainingTime”无法再格式化剩余时间=$(bc -l
  • 什么意思?
【解决方案2】:

我终于解决了将@Barmar 解决方案与另一个解决方案相结合的问题 How to calculate time difference in bash script?https://stackoverflow.com/editing-help#comment-formatting

生成的命令是:

remainingTime=$(awk "BEGIN {printf \"%.2f\",${duration}/${revisionCounter}*${remainingRevision}}‌​")
remainingTime=${remainingTime%.*}
echo  "$(($remainingTime / 60)) minutes and $(($remainingTime % 60)) seconds remaining."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 2012-03-03
    • 2021-02-04
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多