如何在批处理文件中生成 4 位随机数?
Posted
技术标签:
【中文标题】如何在批处理文件中生成 4 位随机数?【英文标题】:How to generate 4 digit random numbers in a batch file? 【发布时间】:2016-07-29 22:40:08 【问题描述】:请给我在dos(批处理)文件中生成4位随机数的代码
我试过了
set /a num=%random% %%10000 +1
但这并不是每次都给出准确的 4 位数字。所以请帮助我。
【问题讨论】:
How to use random in BATCH script? 的可能重复项,对于您的上限,只需使用9999
。
set /A NUM=%Random% %%10000
生成从0
到9999
范围内的随机数;要始终有 4 位数字,您需要填充前导零:set NUM=000%NUM% & set NUM=%NUM:~,-4%
;
@aschipfl 逗号太多:set NUM=%NUM:~-4%
@Stephan,你是对的,谢谢你的提示......
0001
不是 4 位数字。它仍然是一个 1 位数字,但有 3 个填充 0
【参考方案1】:
只是为了增加另一种可能性:
echo %random:~-1%%random:~-1%%random:~-1%%random:~-1%
(从四个随机数中取最后一个数字)
【讨论】:
与其他解决方案相比,这将提供更均匀的分布 这将均匀性误差降低到每位数 0.03% (1 / 3276),但它仍然存在。 @RyanBemrose 没有程序员期望随机数(由算法生成)是真正随机的。 是的,但是 1/3276 和使用伪随机生成器引入的 1/数十亿误差之间存在几个数量级的差异。后者是程序员永远不可能观察到的。前者可以通过花费 10 分钟来运行数千次计算。 我不相信分布更均匀的说法。假设 %RANDOM% 具有不错的随机性,那么数字 0、1、2、3、4、5 的出现频率会比数字 6、7、8、9 的出现频率要小。但这是一步获得填充为 0 的 4 位数字的一种聪明方法。【参考方案2】:您没有说是否需要在整个范围内保持一致,或者您是否只需要一个快速的 4 位数字作为文件名。
一个超级快捷的方法是将你的范围限制在1000-9999
set /a num = %random% %% 9000 + 1000
如果你想要0000-9999
的完整范围,你可以取一个更大的数字并截断以得到最后四位数字,但前提是你必须保证至少有四位数字。为此,请在截断前将数字加 1000。
set /a num = %random% + 1000
set num=%num:~-4%
这仍然存在一致性问题。由于%random%
生成数字的方式,0000-2767
之间的数字将比2768-9999
之间的数字多出约 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,感谢他们在此处借用的部分答案。
【讨论】:
【参考方案3】:试试这个:
set random_number=%random:~-4%
这将生成一个 4 位随机数
【讨论】:
并非总是如此。当%random%
生成一个只有一位或两位数字的数字时,那么“后四位”就不能有更多了。
您可以说%random%%random%%random%%random%
,然后从中获取最后四位数字。
@SomethingDark 这似乎有点矫枉过正。您可以在截断之前添加 1000。【参考方案4】:
粗略地说,
: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 将生成 800(可能 3 个) 200 将生成 %random%=200 或 10200 或 20200 或 30200(可能有 4 个)
【讨论】:
【参考方案5】:试试这个:
set num=0000%random%
set num=%num:~-4%
这将生成一个介于 0000 和 9999 之间的随机数
【讨论】:
以上是关于如何在批处理文件中生成 4 位随机数?的主要内容,如果未能解决你的问题,请参考以下文章