请给我在dos(批处理)文件中生成4位数随机数的代码
我试过
set /a num=%random% %%10000 +1
但这并不是每次都给出4位数字。所以请帮助我。
答案 0 :(得分:4)
只是为了增加另一种可能性:
echo %random:~-1%%random:~-1%%random:~-1%%random:~-1%
(取四个randoms的最后一位数字)
答案 1 :(得分:1)
您不会说您是否需要在整个范围内保持一致性,或者您只想要一个快速的4位数字来表示文件名。
一种超级快捷方式是将您的范围限制为1000-9999
set /a num = %random% %% 9000 + 1000
如果你想要0000-9999
的全范围,你可以取一个更大的数字并截断以获得最后四位数,但只有在保证你至少有四位数后才能获得。为此,请在截断前将数字加1000.
set /a num = %random% + 1000
set num=%num:~-4%
这仍然存在均匀性问题。由于0000-2767
生成数字的方式,2768-9999
之间的数字比%random%
之间的数字显示频率高出约33%。
减少此错误(但不能消除它)的一种方法是将多个%random%
个调用的结果放在一起。
set num=%random:~-1%%random:~-1%%random:~-1%%random:~-1%
在这种情况下,数字0-7
仍然比8-9
的可能性高0.1%左右,这对大多数事情来说已经足够了。
但是,如果你想完全删除错误,你可以通过循环来完成。
:rndloop
set /a num = %random% + 1000
if %num% GEQ 31000 goto :rndloop
set num=%num:~-4%
此循环将始终为您提供0000和9999之间的均匀分布。
感谢@aschipfl,@ Manuel,@ Stephan和@Magoo,感谢他们在这里借来的部分答案。
答案 2 :(得分:0)
试试这个:
set random_number=%random:~-4%
这将生成一个4位数的随机数
答案 3 :(得分:0)
粗略地,
:rndloop
set /a random_number=%random%+10000
if %random_number% geq 40000 goto rndloop
set "random_number=%random_number:~-4%"
echo %random_number%
如果您确实需要0..9999范围内的随机数,请尝试
:rndloop
set /a random_number=%random%
if %random_number% geq 30000 goto rndloop
set /a random_number=random_number/3
echo %random_number%
假设%random%在0到32767之间是线性的,那么必须取消大于29999的数字,因为使用它们会偏向分布:
对于%random%= 800或10800或20800(3种可能),将生成800 将为%random%= 200或10200或20200或30200(4种可能)生成200