尝试在批处理文件中生成 65 到 67 之间的随机数

Posted

技术标签:

【中文标题】尝试在批处理文件中生成 65 到 67 之间的随机数【英文标题】:Trying to generate random number between 65 and 67 in a batch file 【发布时间】:2020-06-11 21:52:15 【问题描述】:

这总是生成 83,它既不是随机的,也不在所需的范围内:

set /a result=(%random%*67/32768)+65

这会生成随机数,但仍然不在我想要的范围内:

set /a result=%random% %% 67+65

这会生成随机数,所有这些数字看起来都是负数并且覆盖范围很广:

set /a result=%random% %% 67-65

这些是我通过谷歌搜索找到的选项。

【问题讨论】:

我认为您基本上是在寻找产生(random mod 3) + 65的解决方案。 【参考方案1】:

在命令行上是:

set /a _test=(%RANDOM% % 3) + 65

在批处理文件中是:

set /a _test=(%RANDOM% %% 3) + 65

【讨论】:

完美运行!【参考方案2】:

对于您的 65-67 的具体情况,您可以使用:

SET /A result=%RANDOM% * 3 / 32768 + 65

一般公式为:

%RANDOM% * (%MAX% - %MIN% + 1) / 32768 + %MINIMUM%

改编自How to use random in BATCH script?中的评论。

【讨论】:

是的,我认为这就是我在第一个示例中的目的,但我搞砸了,把“max”而不是“range”。但是我现在已经运行了几次,每次都生成 65,就像我的示例总是生成 83。 您是在循环中执行此操作吗?您可能需要添加SETLOCAL ENABLEDELAYEDEXPANSION 并使用!RANDOM! 而不是%RANDOM% 有什么区别?但是不,它不在循环中。 如果在循环中执行延迟扩展,您需要启用延迟扩展。您可以发布完整的代码或至少发布更多代码以获得更好的上下文吗? 它似乎正在生成一个随机结果,但它的变化如此之少以至于毫无意义。 %RANDOM% 始终是随机的,但 /3/32768+65 每次都会以相同的数字结束几分钟。 jwdonahue 的回答让我得到了更多随机结果。

以上是关于尝试在批处理文件中生成 65 到 67 之间的随机数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中生成 a 和 b 之间的随机数?

如何在批处理文件中生成 4 位随机数?

如何在 C++ 中生成随机数?

在c中生成1到10之间的随机数

在Javascript中生成2个值到2个小数位之间的随机数

如何在matlab中生成概率3D图