yael Asked: 2018-02-01 12:56:48 +0800 CST2018-02-01 12:56:48 +0800 CST 2018-02-01 12:56:48 +0800 CST bash +如何从数字计算百分比[重复] 772 如何从数字计算百分比 例如我们设置 number=248 我们想知道 $number 的 80% 是多少 那么如何在 bash 中计算呢? 预期输出 198(正好是 198.4,但我们想用 floor 向下取整) bash numeric-data 4 个回答 Voted Best Answer DopeGhoti 2018-02-01T13:08:37+08:002018-02-01T13:08:37+08:00 bash不能做浮点数学,但如果你不需要很高的精度,你可以用这样的东西来伪造它: $ number=248 $ echo $(( number*80/100 )) 198 user232326 2018-02-01T12:59:53+08:002018-02-01T12:59:53+08:00 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 RomanPerekhrest 2018-02-01T13:03:17+08:002018-02-01T13:03:17+08:00 有awk表达: $ number=248 $ awk -v n="$number" 'BEGIN{ print int(n*0.8) }' 198 ilkkachu 2018-02-01T13:19:41+08:002018-02-01T13:19:41+08:00 假设pandn是正数,并且p*n + 100不溢出最大整数,p百分比n是 四舍五入: $(( p*n / 100 )) 四舍五入到最接近,向上四舍五入: $(( (p*n+50) / 100 )) 围捕: $(( (p*n+99) / 100 ))
bash
不能做浮点数学,但如果你不需要很高的精度,你可以用这样的东西来伪造它:Bash 本身无法处理浮点数学。最好的办法是这样使用
bc
:shell (bash,sh) 只能计算整数:
ksh93 能够处理浮点数学:
并使用 0 位小数的格式:
zsh 的做法不同:
但是如果格式化会掉到正确的值:
此外,awk 可以做到这一点:
或者,小数为零:
有
awk
表达:假设
p
andn
是正数,并且p*n + 100
不溢出最大整数,p
百分比n
是四舍五入:
四舍五入到最接近,向上四舍五入:
围捕: