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

如何实现按指定概率生成对应数值区间的随机数?

实现符合指定概率分布的区间随机数生成函数

首先,我们需要将概率与对应的数值区间一一关联,然后通过生成随机数匹配概率区间,最后在选中的区间内生成随机数。以下是完整的实现代码:

function getRandomAmount() {
  // 定义概率与对应区间的映射
  const distributions = [
    { prob: 0.75, min: 100, max: 500 },
    { prob: 0.2, min: 501, max: 5000 },
    { prob: 0.04, min: 10001, max: 50000 },
    { prob: 0.01, min: 50001, max: 100000 }
  ];

  // 生成0到1之间的随机数
  const random = Math.random();
  let cumulativeProb = 0;

  // 遍历找到匹配的区间
  for (const dist of distributions) {
    cumulativeProb += dist.prob;
    if (random <= cumulativeProb) {
      // 在选中的区间内生成随机整数
      return Math.floor(Math.random() * (dist.max - dist.min + 1)) + dist.min;
    }
  }

  // 兜底返回(理论上不会走到这里)
  return 100;
}

代码说明:

  • distributions数组:把每个概率对应的数值区间封装成对象,方便后续遍历匹配。
  • Math.random():生成0(包含)到1(不包含)的随机数,用来匹配预设的概率分布。
  • 累积概率判断:通过累加概率值,判断随机数落在哪个概率区间内,从而选中对应的数值区间。
  • 区间内随机数生成:使用公式 Math.floor(Math.random() * (max - min + 1)) + min 生成[min, max]范围内的整数随机数,如果需要浮点数,去掉Math.floor即可。

验证方法:

你可以通过多次调用函数并统计结果分布来验证概率是否符合要求:

// 统计10000次调用的结果分布
const counts = {
  range1: 0,
  range2: 0,
  range3: 0,
  range4: 0
};

for (let i = 0; i < 10000; i++) {
  const num = getRandomAmount();
  if (num >=100 && num <=500) counts.range1++;
  else if (num >=501 && num <=5000) counts.range2++;
  else if (num >=10001 && num <=50000) counts.range3++;
  else if (num >=50001 && num <=100000) counts.range4++;
}

console.log(counts);
// 输出结果应接近:range1≈7500, range2≈2000, range3≈400, range4≈100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:15:38