我需要计算两个值之间的百分比变化。
我这里的代码:
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/