有没有办法用JavaScript生成指定范围内的随机数?

例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。


当前回答

这对我来说很有用,并生成类似Python的random.randit标准库函数的值:


function randint(min, max) {
   return Math.round((Math.random() * Math.abs(max - min)) + min);
}

console.log("Random integer: " + randint(-5, 5));

其他回答

尝试使用:

函数随机(最小值,最大值){return Math.round((Math.random()*(Math.abs(max-min)))+min);}console.log(随机(1,6));

排名靠前的解决方案在数学上与它下面的注释不同->Math.floor(Math.random()*6)+1。

任务:生成1到6之间的随机数。

Math.random()返回0到1之间的浮点数(例如0.344717274374或0.99341293123),我们将使用它作为百分比,因此Math.floor(Math.random*()*6)+1返回6的某个百分比(max:5,min:0)并加1。作者很幸运,下限是1.,因为百分比下限将“最大限度”返回小于6乘以1的5,并且1将被下限1加上。

当下限大于1时,就会出现问题。例如,任务:生成2到6之间的随机数。

(遵循作者的逻辑)Math.floor(Math.random()*6)+2,很明显,如果我们在这里得到5->Math.random()*66,然后加上2,结果将是7,超出了6的期望边界。

另一个例子,任务:在10到12之间随机生成。

(遵循作者的逻辑)Math.floor(Math.random()*12)+10,(抱歉重复)很明显,我们得到了数字“12”的0%-99%,这将远远超出12的期望边界。

因此,正确的逻辑是取下限和上限之间的差值加1,然后将其下限(减去1,因为Math.random()返回0-0.99,因此无法获得完全上限,这就是为什么我们将1添加到上限以获得最大99%的(上限+1),然后将它下限以消除多余)。一旦我们得到了(差值+1)的地板百分比,我们就可以添加下边界,以获得2个数字之间所需的随机数。

逻辑公式为:Math.floor(Math.random()*((up_boundary-low_boundary)+1))+10。

备注:即使是最高分答案下的评论也是不正确的,因为人们忘记了在差异上加1,这意味着他们永远不会得到上限(是的,如果他们根本不想得到,这可能是一种情况,但要求包括上限)。

根据@Francisc的答案中的int版本添加具有固定精度版本的float:

function randomFloatFromInterval (min, max, fractionDigits) {
  const fractionMultiplier = Math.pow(10, fractionDigits)
  return Math.round(
    (Math.random() * (max - min) + min) * fractionMultiplier,
  ) / fractionMultiplier
}

so:

randomFloatFromInterval(1,3,4) // => 2.2679, 1.509, 1.8863, 2.9741, ...

对于int答案

randomFloatFromInterval(1,3,0) // => 1, 2, 3

此函数可以生成介于(包括)最小值和最大值之间的随机整数:

function randomNumber(min, max) {
  if (min > max) {
    let temp = max;
    max = min;
    min = temp;
  }

  if (min <= 0) {
    return Math.floor(Math.random() * (max + Math.abs(min) + 1)) + min;
  } else {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  }
}

例子:

randomNumber(-2, 3); // can be -2, -1, 0, 1, 2 and 3
randomNumber(-5, -2); // can be -5, -4, -3 and -2
randomNumber(0, 4); // can be 0, 1, 2, 3 and 4
randomNumber(4, 0); // can be 0, 1, 2, 3 and 4

重要的

The following code works only if the minimum value is `1`. It does not work for minimum values other than `1`.

如果你想得到一个介于1(且只有1)和6之间的随机整数,你可以计算:

const rndInt=数学地板(Math.random()*6)+1控制台日志(rndInt)

哪里:

1是起始编号6是可能结果的数量(1+start(6)-end(1))