我正在尝试返回特定范围内的随机数,同时还排除其中的特定范围。我已经看到类似的问题,但是我无法解决它。这是我到目前为止的内容:
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 :(得分: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,并按照注释中的建议使用该值来确定范围,则最终结果的一半将落在较小的顶部范围内。这会使您的结果偏向该最高范围,而不是真正在整个范围内找到一个随机数。