You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何生成1-100区间均匀分布的随机整数

1-100均匀随机整数实现方案

原代码存在的问题

你写的初始版本有两个明显问题:

  • 存在拼写错误:Math.randon() 是错误写法,正确API为Math.random()
  • 概率分布不均的核心原因:Math.round()执行四舍五入逻辑时,区间首尾值的命中区间长度只有中间值的一半。以1-100范围为例,Math.random()*(max-min)+min生成的数值范围是[1,100):
    • 命中1需要值落在[1, 1.5),区间长度0.5
    • 命中2~99任意整数需要值落在[n-0.5, n+0.5),每个数对应区间长度为1
    • 命中100需要值落在[99.5, 100),区间长度0.5
      首尾数值的选中概率仅为中间数值的50%,完全不满足抽奖场景的公平性要求。

正确均匀分布实现

使用Math.floor()向下取整,调整随机数映射区间,保证每个整数对应的命中区间长度完全一致,即可实现真正的均匀分布:

function getRandomInt(min, max) {
  // 处理入参,确保边界为整数
  const minVal = Math.ceil(min);
  const maxVal = Math.floor(max);
  // 映射逻辑:
  // Math.random() 生成[0,1)左闭右开的浮点数
  // 乘以(maxVal - minVal + 1)后得到[0, 差值+1)范围的数
  // 向下取整得到[0, 差值]范围的均匀整数,加minVal后刚好覆盖[minVal, maxVal]闭区间所有整数
  return Math.floor(Math.random() * (maxVal - minVal + 1)) + minVal;
}

// 调用示例:获取1-100之间的随机中奖号码
console.log(getRandomInt(1, 100));

这个实现中每个整数对应的随机值区间长度完全相等,所有数字被选中的概率一致,符合抽奖场景的公平性要求。


内容的提问来源于stack exchange,提问作者Rodhis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:54:21