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

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


当前回答

如果您想覆盖负数和正数,并确保其安全,请使用以下方法:

JS解决方案:

function generateRangom(low, up) {
  const u = Math.max(low, up);
  const l = Math.min(low, up);
  const diff = u - l;
  const r = Math.floor(Math.random() * (diff + 1)); //'+1' because Math.random() returns 0..0.99, it does not include 'diff' value, so we do +1, so 'diff + 1' won't be included, but just 'diff' value will be.
  
  return l + r; //add the random number that was selected within distance between low and up to the lower limit.  
}

Java解决方案:

public static int generateRandom(int low, int up) {
        int l = Math.min(low, up);
        int u = Math.max(low, up);
        int diff = u - l;

        int r = (int) Math.floor(Math.random() * (diff + 1)); // '+1' because Math.random() returns 0..0.99, it does not include 'diff' value, so we do +1, so 'diff + 1' won't be included, but just 'diff' value will be.
  
        return l + r;//add the random number that was selected within distance between low and up to the lower limit.      
}

其他回答

尽管有许多答案,但结果几乎相同。我想补充一下我的答案并解释一下它的作用。因为理解它的工作方式比复制粘贴单行代码更重要。生成随机数只是简单的数学。

代码:

function getR(lower, upper) {

  var percent = (Math.random() * 100);
  // this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
  //now you have a percentage, use it find out the number between your INTERVAL :upper-lower 
  var num = ((percent * (upper - lower) / 100));
  //num will now have a number that falls in your INTERVAL simple maths
  num += lower;
  //add lower to make it fall in your INTERVAL
  //but num is still in decimal
  //use Math.floor>downward to its nearest integer you won't get upper value ever
  //use Math.ceil>upward to its nearest integer upper value is possible
  //Math.round>to its nearest integer 2.4>2 2.5>3   both lower and upper value possible
  console.log(Math.floor(num), Math.ceil(num), Math.round(num));
}

TL;博士

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max - min + 1))
}

要获得随机数generateRandomInteger(-20,20);

下面的解释

整数-不是分数的数字;整数

我们需要得到一个随机数,比如最小值和最大值之间的X。十、 min和max都是整数

即最小<=X<=最大

如果我们从方程中减去min,这相当于

0<=(X-最小)<=(最大-最小)

现在,让我们将其与随机数r相乘这是

0<=(X-分钟)*r<=(最大-分钟)*r

现在,让我们把min加回到等式中

最小<=最小+(X-最小)*r<=最小值+(最大-最小)*r

对于任何给定的X,只有当r的范围为[0,1]时,上述方程才满足。对于r的任何其他值,上述方程都不满足。

在此处了解范围[x,y]或(x,y)的更多信息

我们的下一步是找到一个函数,该函数总是产生范围为[0,1]的值

现在,r的范围,即[0,1]与Javascript中的Math.random()函数非常相似。不是吗?

函数的作用是:返回浮点伪随机范围[0,1)内的数字;即从0(含0)到但不包括1(不含)

使用Math.Random()的随机函数0<=r<1

注意,在Math.random()中,左边界是包含的,右边界是排他的。这意味着min+(max-min)*r的取值范围为[min,max)

为了包括我们的右边界,即[min,max],我们将右边界增加1,并将结果下限。

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max - min + 1))
}

要获得随机数

generateRandomInteger(-20,20);

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

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

尝试使用:

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

如果您想覆盖负数和正数,并确保其安全,请使用以下方法:

JS解决方案:

function generateRangom(low, up) {
  const u = Math.max(low, up);
  const l = Math.min(low, up);
  const diff = u - l;
  const r = Math.floor(Math.random() * (diff + 1)); //'+1' because Math.random() returns 0..0.99, it does not include 'diff' value, so we do +1, so 'diff + 1' won't be included, but just 'diff' value will be.
  
  return l + r; //add the random number that was selected within distance between low and up to the lower limit.  
}

Java解决方案:

public static int generateRandom(int low, int up) {
        int l = Math.min(low, up);
        int u = Math.max(low, up);
        int diff = u - l;

        int r = (int) Math.floor(Math.random() * (diff + 1)); // '+1' because Math.random() returns 0..0.99, it does not include 'diff' value, so we do +1, so 'diff + 1' won't be included, but just 'diff' value will be.
  
        return l + r;//add the random number that was selected within distance between low and up to the lower limit.      
}