javascript - 返回不包括特定范围的随机数 - javascript

标签 javascript function random return range

我试图返回特定范围内的随机数,同时排除其中的特定范围。我见过类似的问题,但我无法让它发挥作用。这是我到目前为止所拥有的:

var x = xFunction();

function xFunction() {
    return parseFloat(Math.round(Math.random() * 2250) / 1000).toFixed(3);  
}

if (x > 1.250 && x < 2.001 ) {
  // this number is excluded so redo xFunction();  
} else {
  // this number is acceptable so do some code
}

感谢任何帮助。非常感谢!

最佳答案

处理此问题的一种方法是在删除了排除部分的范围内查找随机数。例如,如果您要查找 0 到 100 之间的随机数并删除 70-80,您将找到 0 到 90 之间的随机数(从排除范围中删除 10)。然后,如果任何值低于 70,则将排除的范围添加回来。这将为每个范围保留适当的随机性比率,您应该看到大部分结果来自较低范围,少数来自较高范围,因为这是分布的较大百分比。

(我已经移动了函数的除法和四舍五入,只是为了更清楚地说明它是如何工作的。)

function xFunction(max, exclude) {
  let excluded_range = exclude[1] - exclude[0]
  let rand = Math.random() * (max - excluded_range)
  if (rand > exclude[0]) rand += excluded_range
  return rand
}


for (let x = 0; x<10; x++){
  let r = xFunction(2250, [1250, 2000])
  console.log ((r / 1000).toFixed(3));  

}

如果您选择随机 0 或 1 并使用它来确定注释中建议的范围,那么您最终将得到大约一半的结果在较小的顶部范围中。这将使您的结果偏向于最高范围,而不是真正在整个范围内找到随机数。

关于javascript - 返回不包括特定范围的随机数 - javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845577/

相关文章:

javascript - 使用 dataType : json to plain javascript 转换 jQuery .ajax

c++ - C 或 C++ 中的函数类型

c++ - 将 void 函数转换为 char* C++

Python 模块错误 :Randint

python - 为什么Python的set()在某些情况下要对列表进行排序?

javascript - jQuery.parseJSON 意外的标记/

javascript - 制作一个不受 body 类影响的标签

javascript - AngularJS $digest 已经在进行中

javascript - jquery .on() 在事件发生之前执行函数

random - 如何生成唯一 token (用于电子邮件验证)?