随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]
Posted
技术标签:
【中文标题】随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]【英文标题】:Random number generator doesn't produce expected numbers within a given range using values from input fields [duplicate] 【发布时间】:2019-10-15 02:11:48 【问题描述】:我正在尝试在两个给定值之间生成一个随机数。我可以用一个非常标准的小函数来生成它,但是当我尝试通过输入字段设置最大值和最小值时,我得到了一些意想不到的结果。
这是使用 jQuery,这对于这个特定功能不是必需的,但对于较大的项目是必需的。
这是我发现的一个例子:
https://jsfiddle.net/u2k41hzd/
function randomNumber(min, max)
points = Math.floor(Math.random() * (max - min + 1) + min);
$( "button" ).on( "click", function ( event )
minPoints = $( ".min-points" ).val();
maxPoints = $( ".max-points" ).val();
randomNumber(minPoints, maxPoints);
$(".random").html(points);
);
如果最小数字是 1,最大数字是 6,我希望得到 1 到 6 之间的数字。但是,我得到的数字是 0 到 5 之间的数字。
如果最小数字是 2,最大数字是 6,我希望得到 2 到 6 之间的数字,但会得到 0 到 4 之间的数字。传入 3 和 6 会得到 0 到 3 之间的数字,依此类推。
忽略输入值并对其进行硬编码似乎可以毫无问题地产生预期结果。本质上,我只是不确定为什么输入值的行为如此。我确定我只是误解了某些东西或在某处犯了错误,但我无法确定原因!
【问题讨论】:
@RoryMcCrossan 他的随机数逻辑非常好,你的错了。对于5
到 10
的限制,您的代码实际上会从 5 <= n <= 14
生成数字
确实是我的错。然而,这仍然是重复的。
【参考方案1】:
问题是您需要将min
添加到四舍五入的数字中,而不是随机生成的数字中:
function randomNumber(min, max)
points = Math.floor(Math.random() * (max - min + 1)) + min;
进一步解释,对于 2 和 9 的情况:
-
Math.random() 生成一个介于 0 和 0.999999999 之间的数字...
最大值 - 最小值 + 1 = 8
所以生成的数字将在 8 * 0 和 8 * 0.99999999 范围内...
Flooring 将在 [0, 7] 范围内向下舍入
结果需要偏移起始数字(即允许的最小数字 - 2)
【讨论】:
发现你必须使用Number(max)
和 Number(min)
因为在 Microsoft Edge jQuery 中由于某种原因返回一个字符串而不是一个 int。
@VasilDininski 当然——我的错误
这是问题,谢谢!我确实还需要在输入值上使用 parseInt 来阻止它们被解释为字符串,但仅此而已。以上是关于随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章