我在shell代码中使用了下面的脚本行
百分比= echo "scale=2; $DP*100/$SDC" | bc
它返回.16作为输出,但我需要它为0.16
答案 0 :(得分:0)
使用bc
符合Posix的解决方案:
#!/bin/sh
Percent="$(echo "
scale=2;
a = $DP * 100 / $SDC;
if (a > -1 && a < 0) { print "'"-0"'"; a*=-1; }
else if (a < 1 && a > 0) print 0;
a" | bc)"
当答案介于-1和1(不包括)但不为零时,所有这些特殊检查都是丑陋的。
让我们使用awk
代替Posix兼容解决方案:
#!/bin/sh
Percent="$(echo "$DP" "$SDC" |awk '{printf "%.2f", $1 * 100 / $2}')"
Z shell可以原生地执行此操作:
#!/bin/zsh
Percent="$(printf %.2f $(( DP * 100. / SDC )) )"
(点是必要的,指示zsh使用浮点数学。)
使用字符串操作的本地Posix解决方案(假设整数输入):
#!/bin/sh
# # e.g. round down e.g. round up
# # DP=1 SDC=3 DP=2 SDC=3
Percent=$(( DP * 100000 / SDC + 5)) # Percent=33338 Percent=66671
Whole=${Percent%???} # Whole=33 Whole=66
Percent=${Percent#$Whole} # Percent=338 Percent=671
Percent=$Whole.${Percent%?} # Percent=33.33 Percent=66.67
计算所需答案的1,000倍,这样我们就可以获得最终分辨率所需的所有数据到百分之一。它增加了五个,所以我们可以正确地截断千分之一的数字。然后我们将临时变量$Whole
定义为截断的整数值,我们暂时将其从$Percent
剥离,然后我们附加一个点和小数,不包括千分之一(我们做错了所以我们可以得到百分之一圆了。)