关于bash shell小数的计算问题:
如果需要计算小数,则必须得使用bc函数。
例:计算 3.4+6.5*1.23 精确到小数点后2位。
echo "scale=2;3.4+6.5*1.23" | bc | sed 's/^\./0&/'
其中sed函数保证了即使z最终的值类似于:0.xx的情况下也是可以完美显示的。
例:
prob=`echo "scale=2;1 - ((1-$prob) * ($days-($numPeople-1)) / $days)" | bc | sed 's/^\./0&/'`
注意这里需要使用while循环来控制阶乘的计算。控制方法如下:
#!/bin/sh
days=365
numPeople=1
prob=0
c=1
while [ $c -eq 1 ];do
numPeople=$(($numPeople+1))
prob=`echo "scale=2;1 - ((1-$prob) * ($days-($numPeople-1)) / $days)" | bc | sed 's/^\./0&/'`
c=`expr 1.0 \> $prob`
echo "Number of People: $numPeople"
echo "Prob. of same Birthday: $prob"
done
简单的说就是下面的表达:
[root@xiwen math]# b=0.00001 c=0.4;expr $b \> $c
0
[root@xiwen math]# b=0.00001 c=0.4;expr $b \< $c
1
云平台开发运维解决方案@george.sre
GitHub: https://github.com/george-sre
欢迎交流~
网友评论