随机数生成器不会使用输入字段中的值来生成给定范围内的期望数

时间:2019-05-29 12:45:31

标签: javascript jquery forms random

我正在尝试在两个给定值之间生成一个随机数。我可以使用标准的小功能来生成此代码,但是当我尝试通过输入字段设置最大值和最小值时,会得到一些意外的结果。

这是使用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之间,依此类推。 / p>

忽略输入值并对其进行硬编码似乎可以产生预期的结果,而不会出现任何问题。本质上,我只是不确定为什么输入值会如此。我敢肯定我只是误解了某处或在某个地方犯了一个错误,但我无法确定原因!

1 个答案:

答案 0 :(得分:0)

问题是您需要将min添加到四舍五入的数字,而不是随机生成的数字:

function randomNumber(min, max) {
    points = Math.floor(Math.random() * (max - min + 1)) + min;
}

为进一步解释,对于2和9:

  1. Math.random()生成一个介于0和0.999999999之间的数字...
  2. 最大-最小+ 1 = 8
  3. 因此生成的数字将在8 * 0和8 * 0.99999999 ...
  4. 的范围内
  5. 对其进行覆盖将舍入到[0,7]范围
  6. 结果需要以起始数字(即允许的最小数字-2)抵消
相关问题