本文介紹使用shell實現隨機數生成以及對浮點數進行四舍五入運算。
隨機數生成
生成0-1之間的隨機數
生成0-1的隨機數:
#!/bin/bash
random_number=`echo "scale=4 ; ${RANDOM}/32767" | bc -l` # 生成0-1的隨機數
# random_number=`bc -l <<< "scale=4 ; ${RANDOM}/32767"`
echo $random_number
exit 0
執行:
$ sh random.sh
.8696
$ sh random.sh
.4517
$ sh random.sh
.5126
${RANDOM}
函數產生0 - 32767之間的偽隨機整數。其中32767(2^15 - 1)是有符號16位整數的上限。scale=4
:保留4位小數
生成0-n之間的隨機數
生成0-10之間的隨機數:
#!/bin/bash
size=10
max=$(( 32767 / size * size ))
while (( (rand=$RANDOM) >= max )); do :; done
rand=$(( rand % (size+1) ))
echo $rand
生成1-10之間的隨機數:
#!/bin/bash
size=10
max=$(( 32767 / size * size ))
while (( (rand=$RANDOM) >= max )); do :; done
rand=$(( rand % (size) + 1 ))
echo $rand
max=$(( 32767 / size * size ))
語句比較關鍵,這么處理的原因是${RANDOM}產生的最大數是32767,如果生成1-10之間的隨機數,需要去掉32761-32767之間的數,否則會導致出現9和10的概率和其它數不一樣。
對浮點數進行四舍五入運算
可以使用 printf "%.*f\n" [精度] [浮點數]
命令對浮點數進行四舍五入運算。
$ printf "%.*f\n" 0 6.666
7
$ printf "%.*f\n" 1 6.666
6.7
$ printf "%.*f\n" 2 6.666
6.67
bash腳本示例:
#!/bin/bash
random_number=`echo "scale=4 ; ${RANDOM}/32767" | bc -l` # 生成0-1的隨機數
number=`echo "$random_number*100" | bc`
echo $number
number_round1=`echo $number | xargs printf "%.*f\n" 0`
echo $number_round1
number_round2=`echo $number | xargs printf "%.*f\n" 1`
echo $number_round2
exit 0
執行結果如下:
97.8900
98
97.9