在特定范围内使用JavaScript生成随机整数?

如何在Javascript中的两个指定变量之间生成随机整数,例如x = 4y = 8会输出4,5,6,7,8中的任意一个?


Mozilla开发者网络页面上有一些例子:

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive)
 * Using Math.round() will give you a non-uniform distribution!
 */
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

这是它背后的逻辑。 这是一个简单的规则三:

Math.random()返回0(包含)和1(不包含)之间的Number 。 所以我们有这样的间隔:

[0 .................................... 1)

现在,我们想要一个介于min (含)和max (独占)之间的数字:

[0 .................................... 1)
[min .................................. max)

我们可以使用Math.random以[min,max)间隔获取记者。 但是,首先我们应该从第二个时间间隔减去min来解决问题:

[0 .................................... 1)
[min - min ............................ max - min)

这给出:

[0 .................................... 1)
[0 .................................... max - min)

我们现在可以应用Math.random ,然后计算记者。 我们选择一个随机数字:

                Math.random()
                    |
[0 .................................... 1)
[0 .................................... max - min)
                    |
                    x (what we need)

所以,为了找到x ,我们会这样做:

x = Math.random() * (max - min);

不要忘记添加min ,以便我们在[min,max]间隔中获得一个数字:

x = Math.random() * (max - min) + min;

这是MDN的第一个功能。 第二个返回minmax之间的整数,包括两端在内。

现在为了获得整数,你可以使用roundceilfloor

您可以使用Math.round(Math.random() * (max - min)) + min ,但这会给出非均匀分布。 minmax只有大概一半的滚动机会:

min...min+0.5...min+1...min+1.5   ...    max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘   ← Math.round()
   min          min+1                          max

随着max距离的排除,它的卷动比min机会更小。

使用Math.floor(Math.random() * (max - min +1)) + min您可以获得完美均匀的分布。

min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)
|        |        |         |        |        |
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘   ← Math.floor()
   min     min+1               max-1    max

你不能在该方程中使用ceil()-1 ,因为max现在的滚动概率略低,但你也可以滚动(不需要的) min-1结果。


var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;

的Math.random()

从Mozilla开发者网络文档:

// Returns a random integer between min and max

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + 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;
链接地址: http://www.djcxy.com/p/17719.html

上一篇: Generating random whole numbers in JavaScript in a specific range?

下一篇: How can I generate random alphanumeric strings in C#?