如何使用Math.random()函数获取指定区间[x,y]内的随机数值
获取x到y区间随机整数的实现方案
默认前置条件:x、y均为整数,且y ≥ x,最终返回结果包含x、y两个边界值。
核心代码
// 整数随机值,包含x和y parseInt(Math.random() * (y - x + 1)) + x
逻辑拆解
你之前掌握的parseInt(Math.random()*x)+1是获取1到x的随机值,本质是先生成0到x的左闭右开区间浮点数,取整后加1平移区间到1到x,扩展到x到y的逻辑完全通用:
- 先算区间总长度:
y - x + 1,加1是为了覆盖首尾两个边界,比如2到5的区间有2、3、4、5共4个值,5-2+1=4刚好匹配总数量 Math.random() * (y - x + 1)得到[0, y-x+1)范围的浮点数- 用
parseInt取整后得到[0, y-x]范围的整数 - 最后加偏移量
x,把区间整体平移到[x, y],完全匹配需求
补充:非整数随机值实现
如果不需要取整,只要x到y之间的浮点数,直接用下方公式即可,返回值范围是[x, y):
Math.random() * (y - x) + x
验证示例
以获取3到7的随机整数为例:
- 区间长度为7-3+1=5
- 代入公式得
parseInt(Math.random() *5) +3 - 取整后得到0-4的整数,加3后刚好是3到7的整数,符合预期
注意:如果传入的x大于y,可以先在代码里加一步大小判断交换两个值,避免出现异常结果。
内容的提问来源于stack exchange,提问作者Baco_Hasino
相关产品推荐
相关产品推荐

