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

时间:2018-08-14 16:04:49

标签: 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
}

感谢您的帮助。非常感谢!

1 个答案:

答案 0 :(得分:1)

处理此问题的一种方法是在除去了排除部分的范围内寻找随机数。例如,如果您正在寻找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,并按照注释中的建议使用该值来确定范围,则最终结果的一半将落在较小的顶部范围内。这会使您的结果偏向该最高范围,而不是真正在整个范围内找到一个随机数。