BASH:百分比变化-如何计算?没有BC如何获得绝对值?

dzi*_*iki 3 math bash arithmetic-expressions

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

我在这里的代码:

echo $time1
echo $time2
pc=$(( (($time2 - $time1)/$time1 * 100) ))
echo $pc
Run Code Online (Sandbox Code Playgroud)

在控制台中带来这样的输出(带有set -xe选项)

+ echo 1800
1800
+ echo 1000
1000
+ pc=0
+ echo 0
Run Code Online (Sandbox Code Playgroud)

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

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

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

if (( (( "$pc" > 20 || (( "$pc" < -20 )); then...
Run Code Online (Sandbox Code Playgroud)

Tom*_*ech 5

正如您所提到的,不必在bash中执行此操作,我建议使用awk:

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

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

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

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

%.0f说明符将导致结果格式被舍入为整数(浮点0小数位)。