BASH:百分比变化——如何计算?如何在没有 bc 的情况下获得绝对值?

标签 bash math arithmetic-expressions

我需要计算两个值之间的百分比变化。

我这里的代码:

echo $time1
echo $time2
pc=$(( (($time2 - $time1)/$time1 * 100) ))
echo $pc

在控制台中产生这样的输出(使用 set -xe 选项)

+ echo 1800
1800
+ echo 1000
1000
+ pc=0
+ echo 0

数学表达式中的代码似乎写得正确,但我仍然得到 -80 左右。为什么这会发生在我身上?

问题的第二部分。我无权访问 bc 命令。据我所知,它可以给我所拥有的数字的绝对值。

所以.. 如果没有 bc 命令 - 这对 IF 条件来说是个好主意吗?

if (( (( "$pc" > 20 || (( "$pc" < -20 )); then...

最佳答案

正如您提到的,在 bash 中没有必要这样做,我建议使用 awk:

awk -v t1="$time1" -v t2="$time2" 'BEGIN{print (t2-t1)/t1 * 100}'

通常,awk 设计用于处理文件,但您可以使用 BEGIN block 执行计算,而无需将任何文件传递给它。可以使用 -v 开关将 Shell 变量传递给它。

如果您希望结果四舍五入,您可以随时使用 printf:

awk -v t1="$time1" -v t2="$time2" 'BEGIN{printf "%.0f", (t2-t1)/t1 * 100}'

%.0f 格式说明符使结果四舍五入为整数(小数点后 0 位的 float )。

关于BASH:百分比变化——如何计算?如何在没有 bc 的情况下获得绝对值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267830/

相关文章:

bash - 逐字捕获命令行(包括引号!)以调用内部脚本

java - 在 Mac OS X 上安装、配置和运行 Hadoop 2.2.0

使用 numpy 的 Python 微分不产生预期的输出

math - 是否有用于在非标准分析中进行计算的超真实数据类型实现?

bash - 如何在不复制存储库的情况下自动从github下载文件

python - 使用 python 或 bash 按时间戳将音频文件复制到新文件夹

java - BigDecimal HALF_UP 舍入问题

c# - 以最佳方式检查算术字符串括号对称性

haskell - Parsec-Haskell,格式化解析错误

r - 在 R 中,为什么 factorial(100) 与 prod(1 :100)?) 的显示不同