shell-03 关于bash shell小数的计算问题:

image.png
关于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

个人主页:https://geekgoogle.com

GitHub: https://github.com/george-sre

Mail: george.sre@hotmail.com

简书: georgesre - 简书

欢迎交流~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容