【问题标题】:Bash - Calculate Percentage [duplicate]Bash - 计算百分比[重复]
【发布时间】:2019-03-21 09:54:48
【问题描述】:

我正在尝试在 Linux 系统上进行计算。 我确实有两个不同的数字,用变量定义

$1= 1024 $2= 20

我现在的任务是计算 1024 中的 20 有多少百分比。计算结果为 (100/1024*20) 问题是,对于这种类型的代码,bash 总是说 0:

echo $((100/$1*$2))

有人知道我如何计算这个吗?

【问题讨论】:

  • 不清楚,请在您的帖子中发布更真实的输入和输出示例,然后告诉我们。
  • 我觉得这里用bc -l计算比较好
  • @Inian 更好地复制:stackoverflow.com/questions/12722095/…
  • 这种“类型”的代码并不总是返回 0。考虑一下:$((100* $2/$1))。它是同一种代码,并且给出了截断为 0 的正确百分比。也可以用同一种代码将结果四舍五入到最接近的整数,没有 bc 或 awk 等。参见stackoverflow.com/a/59414940/12559612。跨度>

标签: bash awk


【解决方案1】:

您可以使用bc -l 命令执行此操作。 例如。 echo "100/1024*20" | bc -l1.953125

【讨论】:

  • 请不要只说怎么做,还要解释为什么原来的尝试行不通。
【解决方案2】:

您的尝试没有成功,因为您正在执行整数计算:

100/1024 = 0          // integer calculation
100/1024 = 0.09765625 // floating point calculation

因此,您需要以某种方式说明要进行浮点计算。
你可以这样做:

awk 'BEGIN {print (100/1024*20)}'

更多示例请参见this post

【讨论】:

  • awk 'BEGIN{printf "%.2f\n",20/1024*100}'
  • 请不要只说怎么做,还要解释为什么原来的尝试行不通。
  • awk:致命:除零尝试对 awk 不起作用
  • @kvantour:好的,我相应地编辑了我的问题。
【解决方案3】:

您可以告诉bc 以小数点后两位(或所需的位数)显示结果。 使用下面的命令

echo "scale=8; 100 / $1 * $2" | bc

在我的电脑上,它报告如下:

1.95312500

您可以通过将正确的数字传递给 'scale' 属性来更改小数位数。

【讨论】:

  • 请不要只说怎么做,还要解释为什么原来的尝试行不通。
  • @dominique 在回答中已经提到了这一点。并且 OP 没有问“为什么最初的尝试不起作用”。 OP 问“有人知道我如何计算这个吗?”,我想我回答了。
猜你喜欢
  • 2013-05-05
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2013-11-19
  • 2021-12-17
  • 2011-06-01
相关资源
最近更新 更多