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

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

技术背景

在JavaScript编程中,经常会遇到需要生成指定范围内随机数的需求,例如模拟游戏中的随机事件、生成测试数据等。JavaScript提供了Math.random()方法来生成随机数,但需要一定的处理才能得到指定范围内的随机数。

实现步骤

生成指定范围内的随机整数

如果要生成一个包含最小值和最大值的随机整数,可以使用以下函数:

1
2
3
4
5
6
function randomIntFromInterval(min, max) { 
return Math.floor(Math.random() * (max - min + 1) + min);
}

const rndInt = randomIntFromInterval(1, 6);
console.log(rndInt);

生成指定范围内的随机浮点数

要生成一个包含最小值但不包含最大值的随机浮点数,可以使用以下函数:

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

安全的随机整数生成

Math.random()不提供加密安全的随机数,如果需要加密安全的随机数,可以使用crypto.getRandomValues()方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const randomInteger = (min, max) => {
const range = max - min;
const maxGeneratedValue = 0xFFFFFFFF;
const possibleResultValues = range + 1;
const possibleGeneratedValues = maxGeneratedValue + 1;
const remainder = possibleGeneratedValues % possibleResultValues;
const maxUnbiased = maxGeneratedValue - remainder;

if (!Number.isInteger(min) || !Number.isInteger(max) ||
max > Number.MAX_SAFE_INTEGER || min < Number.MIN_SAFE_INTEGER) {
throw new Error('Arguments must be safe integers.');
} else if (range > maxGeneratedValue) {
throw new Error(`Range of ${range} (from ${min} to ${max}) > ${maxGeneratedValue}.`);
} else if (max < min) {
throw new Error(`max (${max}) must be >= min (${min}).`);
} else if (min === max) {
return min;
}

let generated;
do {
generated = crypto.getRandomValues(new Uint32Array(1))[0];
} while (generated > maxUnbiased);

return min + (generated % possibleResultValues);
};

核心代码

生成随机整数

1
2
3
4
5
6
7
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max - min + 1));
}

// 使用示例
const randomNum = generateRandomInteger(-20, 20);
console.log(randomNum);

生成随机浮点数

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

最佳实践

  • 确保输入的有效性:在生成随机数之前,检查输入的最小值和最大值是否为有效的整数或浮点数,避免出现错误。
  • 考虑安全性:如果需要生成加密安全的随机数,使用crypto.getRandomValues()方法。
  • 使用函数封装:将随机数生成逻辑封装到函数中,提高代码的复用性和可维护性。

常见问题

Math.random()生成的随机数是否安全?

Math.random()不提供加密安全的随机数,不适合用于安全相关的场景。建议使用crypto.getRandomValues()方法来生成加密安全的随机数。

如何确保生成的随机数包含最大值?

在生成随机整数时,需要在计算范围时加1,然后使用Math.floor()方法向下取整,确保可以包含最大值。例如:

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

在JavaScript中生成两个数字之间的随机数
https://119291.xyz/posts/2025-05-13.generate-random-number-between-two-numbers-in-javascript/
作者
ww
发布于
2025年5月13日
许可协议