js 可以使用 Math(算数) 对象来实现随机数的生成。
一、生成随机数相关 Math 方法
方法 | 描述 |
ceil(x) | 用于对数进行上舍入,即向上取整 |
floor(x) | 函数用于对 x 进行下舍入,即向下取整 |
round(x) | 函数用于四舍五入 |
random() | 返回 0 ~ 1 之间的随机数,包含 0 不包含 1 |
基本实例如下:
// 获取从 1 到 10 的随机整数,取 0 的概率极小。
var randomInt = Math.ceil(Math.random() * 10);
console.log(randomInt);
// 可均衡获取 0 到 1 的随机整数。
var randomInt2 = Math.round(Math.random());
console.log(randomInt2);
// 可均衡获取 0 到 9 的随机整数。
var randomInt3 = Math.floor(Math.random() * 10);
console.log(randomInt3);
// 基本均衡获取 0 到 10 的随机整数,其中获取最小值 0 和最大值 10 的几率少一半。
var randomInt4 = Math.round(Math.random() * 10);
console.log(randomInt4);
我们可以使用Math.random()
函数。这个函数返回一个介于 [0,1) (包括0,不包括1)之间的随机浮点数。
// 生成一个0到1之间的随机数
var randomNumber = Math.random();
console.log(randomNumber);
二、生成 [n,m] 的随机整数
代码如下:
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var n = 10; // 最小值
var m = 20; // 最大值
var randomInt = getRandomInt(n, m);
console.log(randomInt);
我们定义了一个名为 getRandomInt()
的函数,该函数接受两个参数 min
和 max
,并返回一个在 min
和 max
之间的随机整数。我们使用 Math.ceil()
函数将 min
向上取整,使用 Math.floor()
函数将 max
向下取整,然后使用 Math.random()
函数生成一个介于 0 和 1 之间的随机数,并将其乘以 (max - min + 1)
,再加上 min
,最后使用 Math.floor()
函数将其向下取整得到最终的随机整数。
三、代码详解
为什么乘以 (max - min + 1)
,再加上 min
的原因:(m=max,m=min)
-
乘以 (𝑚−𝑛+1):
Math.random()
函数返回一个介于 0(包括0)和1(不包括1)之间的随机浮点数。- 当我们将这个随机浮点数乘以 (𝑚−𝑛+1),我们实际上是在扩展这个随机数的范围,使其覆盖从 n 到 m 的所有整数。
- 例如,如果 n=1 和 m=3,那么m−n+1=3。将Math.random() 的结果乘以 3 会给我们一个介于 0 和 3 之间的随机数。
-
加上 n:
- 由于
Math.random()
生成的是 [0, 1) 的数,我们需要将它转换为 n 到 m 的范围。 - 通过将扩展后的随机数加上 𝑛n,我们可以确保结果至少是 n,并且最多是 m。
- 这样,无论
Math.random()
生成什么值,加上 n 后都会得到一个在 n 和 m 之间的整数。
- 由于
-
使用
Math.floor()
:Math.random()
生成的是一个浮点数,而我们通常希望生成一个整数。- 使用
Math.floor()
函数可以确保我们得到的是一个整数,它会取小于或等于给定数字的最大整数。 - 这意味着即使 Math.random() 生成了 m 的小数部分,
Math.floor()
也会将其转换为 m。