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