Ali*_*adi 4 bc calculator numeric-data
以下代码计算 n 次试验中 k 次成功事件的二项式概率:
n=144
prob=$(echo "0.0139" | bc)
echo -e "Enter no.:"
read passedno
k=$passedno
nCk2() {
num=1
den=1
for((i = 1; i <= $2; ++i)); do
((num *= $1 + 1 - i)) && ((den *= i))
done
echo $((num / den))
}
binomcoef=$(nCk2 $n $k)
binprobab=$(echo "scale=8; $binomcoef*($prob^$k)*((1-$prob)^($n-$k))" | bc)
echo $binprobab
Run Code Online (Sandbox Code Playgroud)
当 $passedno (=k) 输入“5”时,结果显示为 0(而不是“0.03566482”),而输入“4”时,结果显示为“.07261898”。
如何以 8 位十进制数字的给定精度打印输出,而不获取输出的四舍五入值?
假设您想计算 7 占 116 的百分比。
您只需将 7 除以 116,然后将结果乘以 100。
结果应该如下所示:
bc -l <<< '(7/116)*100'
6.03448275862068965500
Run Code Online (Sandbox Code Playgroud)
您希望它精确到小数点后两位,因此您添加scale=2;
,期望这样:
bc -l <<< 'scale=2; 100*(7/116)'
6.00
Run Code Online (Sandbox Code Playgroud)
您尝试增加该scale
值:
bc -l <<< 'scale=3; 100*(7/116)'
6.000
Run Code Online (Sandbox Code Playgroud)
由于某种原因scale=4;
精确到 2 个位置,但有这些尾随0
s
bc -l <<< 'scale=4; 100*(7/116)'
6.0300
Run Code Online (Sandbox Code Playgroud)
理想的解决方案是bash
/sh
原生支持浮点计算。为什么他们还没有这样做呢?我不知道。不这样做似乎很愚蠢。在那之前你可以用这些:
公元前
scale
.bc -l <<< "x=(7/116)*100; scale=2; x/1"
6.03
Run Code Online (Sandbox Code Playgroud)
打印函数
bc
命令用"$(
...括起来)"
以进行命令替换。printf
.%.2f
在格式字符串中使用(%f
表示浮点数,.2
表示精确到小数点后两位(如scale=2
))。printf '%.2f\n' "$(bc -l <<< '(7/116)*100')"
6.03
Run Code Online (Sandbox Code Playgroud)
awk
awk
也可以做算术echo
以某种方式打破了交互循环。可能有更好的方法来做到这一点。echo | awk '{print 100*(7/116)}'
6.03448
Run Code Online (Sandbox Code Playgroud)