如何根据数字计算百分比
例如我们设置
number=248
我们想知道 $number 中的 80% 是多少
那么如何在 bash 中计算它呢?
预期输出 198(确切地说是 198.4,但我们想向下取整)
答案1
bash
不能做浮点数学,但是如果你不需要太多的精度,你可以伪造它来完成这样的事情:
$ number=248
$ echo $(( number*80/100 ))
198
答案2
Bash 本身无法处理浮点数学。最好的选择是bc
像这样使用:
$ bc <<<"248*80/100"
198
shell(bash、sh)只能计算整数:
$ bash -c 'echo $((248*80/100))'
198
ksh93 能够处理浮点数学:
$ ksh -c 'echo $((248*0.8))'
198.4
小数点后 0 的格式:
$ ksh -c 'printf "%.0f\n" "$((248*0.8))"'
zsh 的做法有所不同:
$ zsh -c 'echo $((248*0.8))'
198.40000000000001
但如果格式化,将变为正确的值:
$ zsh -c 'printf "%.0f\n" "$((248*0.8))"'
198
另外,awk 可以做到这一点:
$ awk -vn=248 'BEGIN{print(n*0.8)}'
198.4
或者,小数点为零:
$ awk -vn=248 'BEGIN{printf("%.0f\n",n*0.8)}'
198
答案3
和awk
表达:
$ number=248
$ awk -v n="$number" 'BEGIN{ print int(n*0.8) }'
198
答案4
假设p
和n
为正数,且不p*n + 100
溢出最大整数,则p
百分比n
为
向下舍入:
$(( p*n / 100 ))
四舍五入到最接近的值,四舍五入一半:
$(( (p*n+50) / 100 ))
围捕:
$(( (p*n+99) / 100 ))