我想生成一个从0到3的随机十进制数,结果应如下所示:
0.2
1.5
2.9
我知道的唯一命令是:
echo "0.$(( ($RANDOM%500) + 500))"
但这始终会生成0.xxx
。我该怎么做?
答案 0 :(得分:2)
Bash不支持非整数。您刚刚生成的片段在500到999之间生成一个随机数,然后在“0”之后打印出来。使它看起来像一个真实的数字。
在bash中有很多方法可以做类似的事情(分别生成整数和小数部分)。为了确保最大均匀分布,我只想确定小数点后你想要多少位数并选择一个具有相同精度的随机整数,然后在正确的位置打印带小数的数字。例如,如果您只想在半开放范围[0,3]中的小数点后面的一位数,则可以生成0到30之间的整数,然后打印出以句点分隔的十位和一位:
(( n = RANDOM % 30 ))
printf '%s.%s\n' $(( n / 10 )) $(( n % 10 ))
如果您想要小数点后的两位数,请在RANDOM分配中使用% 300
,在printf
的两个表达式中使用100。等等。
或者,请参阅下面的答案,了解使用非bash builtins的其他工具的许多解决方案:
答案 1 :(得分:0)
$RANDOM
给出0..32767范围内的随机整数
知道这一点,你有很多选择。这是两个:
使用bc:
$ bc <<< "scale=3; 3 * $RANDOM / 32767"
2.681
使用两个$RANDOM
s构建一个数字:
$ echo "$(( $RANDOM % 3 )).$(( $RANDOM % 999 ))"
0.921
我将精度限制为3位小数。增加/减少它应该是微不足道的。