在 JavaScript 中生成两个数字之间的随机数

有没有办法在 JavaScript 中生成指定范围(例如 1 到 6:1、2、3、4、5 或 6)内的随机数?

答案

function randomIntFromInterval(min, max) { // min and max included 
  return Math.floor(Math.random() * (max - min + 1) + min);
}

它 “额外” 的作用是允许以 1 开头的随机间隔。因此,例如,您可以获得 10 到 15 之间的随机数。灵活性。

重要

以下代码仅在最小值为1 。它不适用于除1以外的最小值。

如果您想获得介于 1( 只有 1 )和 6 之间的随机整数,则可以计算:

Math.floor(Math.random() * 6) + 1

哪里:

  • 1 是起始号码
  • 6 是可能的结果数(1 + 开始(6) - 结束(1)

Math.random()

返回介于 min(包括)和 max(包括)之间的整数随机数

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

或介于 min(包括)和 max( 包括)之间的任何随机数

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

有用的例子(整数):

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

** 并且总是很值得提醒(Mozilla):

Math.random()不提供加密安全的随机数。不要将它们用于与安全相关的任何事情。改用 Web Crypto API,更确切地说,使用 window.crypto.getRandomValues()方法。

其他解决方案:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

在线尝试

TL; DR

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

获取随机数generateRandomInteger(-20, 20);

解释如下

我们需要获得一个随机整数,例如介于最小值和最大值之间的X。

对?

min <= X <= max

如果我们从方程式中减去最小值,则等于

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

现在,让我们将其乘以一个随机数r

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

现在,让min添加回方程

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

现在,让我们选择一个得出r的函数,使其满足我们的公式范围为 [min,max]。仅当0 <= r <= 1 时才有可能

好。现在, r即 [0,1] 的范围与 Math.random()函数的结果非常相似。是不是

Math.random()函数返回范围为 [0,1)的浮点伪随机数;即从 0(含)到 1(不含)但不包括

例如,

情况 r = 0

min + 0 *( max - min )= 最小值

情况 r = 1

min + 1 *( max - min )= 最大值

使用 Math.random 的随机情况 0 <= r <1

min + r *( max - min )= X ,其中X 的范围为min <= X < max

上面的结果X是一个随机数字。但是由于 Math.random(),我们的左边界是包含在内的,而右边界是排斥的。为了包括我们的右边界,我们将右边界增加 1 并下限结果。

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

获取随机数

generateRandomInteger(-20, 20) ;

var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;

或者,在下划线

_.random(min, max)

jsfiddle: https ://jsfiddle.net/cyGwf/477/

随机整数 :要获取介于minmax之间的随机整数,请使用以下代码

function getRandomInteger(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}

随机浮点数 :要获取介于minmax之间的随机浮点数,请使用以下代码

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

参考: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random

数学不是我的强项,但是我一直在从事一个项目,我需要在正负之间生成很多随机数。

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}

例如

randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)

当然,您也可以添加一些验证,以确保除了数字以外不要使用其他任何方法。还要确保最小值始终小于或等于最大值。

我写了更灵活的函数,它可以为您提供随机数,而不仅仅是整数。

function rand(min,max,interval)
{
    if (typeof(interval)==='undefined') interval = 1;
    var r = Math.floor(Math.random()*(max-min+interval)/interval);
    return r*interval+min;
}

var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0

固定版本。