如何从数字计算百分比
例如我们设置
number=248
Run Code Online (Sandbox Code Playgroud)
我们想知道 $number 的 80% 是多少
那么如何在 bash 中计算它呢?
预期输出 198(正好是 198.4,但我们想用 floor 向下舍入)
Dop*_*oti 10
bash 不能做浮点数学,但如果你不需要很高的精度,你可以为这样的事情伪造它:
$ number=248
$ echo $(( number*80/100 ))
198
Run Code Online (Sandbox Code Playgroud)
Bash 本身无法处理浮点数学。最好的办法是这样使用bc:
$ bc <<<"248*80/100"
198
Run Code Online (Sandbox Code Playgroud)
shell (bash,sh) 只能计算整数:
$ bash -c 'echo $((248*80/100))'
198
Run Code Online (Sandbox Code Playgroud)
ksh93 能够处理浮点数学:
$ ksh -c 'echo $((248*0.8))'
198.4
Run Code Online (Sandbox Code Playgroud)
并使用 0 位小数的格式:
$ ksh -c 'printf "%.0f\n" "$((248*0.8))"'
Run Code Online (Sandbox Code Playgroud)
zsh 的做法不同:
$ zsh -c 'echo $((248*0.8))'
198.40000000000001
Run Code Online (Sandbox Code Playgroud)
但如果格式化将下降到正确的值:
$ zsh -c 'printf "%.0f\n" "$((248*0.8))"'
198
Run Code Online (Sandbox Code Playgroud)
此外,awk 可以做到:
$ awk -vn=248 'BEGIN{print(n*0.8)}'
198.4
Run Code Online (Sandbox Code Playgroud)
或者,小数点为零:
$ awk -vn=248 'BEGIN{printf("%.0f\n",n*0.8)}'
198
Run Code Online (Sandbox Code Playgroud)