我正在使用
var min = -13;
var max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
但它返回-13和13之间的所有数字(随机)。我怎么能得到它来生成-13到-4之间的随机数,排除-3,-2,-1,0,1,2,3包括4到13个。
答案 0 :(得分:16)
获取1-10之间的随机数并添加3,以获得4-13之间的随机数:
random = Math.ceil(Math.random() * 10) + 3;
在0-1之间生成随机数。如果为0,则将数字设为负数:
random = (Math.floor(Math.random() * 2) == 0) ? 0 - random : random;
JSFiddle显示工作副本:
答案 1 :(得分:1)
据我所知,无法生成随机数并考虑排除集。您需要创建一个递归函数来为您进行过滤。见下文:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
// If random number is undesirable, generate a new number, else return
return (random < 4 && random > -4) ? GenerateRandomNumber() : random;
}
var myRandomNumber = GenerateRandomNumber();
或者@Rozwel礼貌,使用while循环的非递归版本:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = 0;
while (random < 4 && random > -4) {
random = Math.floor(Math.random() * (max - min + 1)) + min;
}
return random;
}
这是a jsperf,它将接受的答案与这两个选项进行比较。
答案 2 :(得分:1)
对你所拥有的东西做一点调整就应该这样做。产生-6到13范围内的随机数,然后如果该值小于4,则减去7.我没有测试它,但我怀疑它会比产生两个随机数并乘以更好。
var min = -6;
var max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
if(random < 4){random = random - 7;}
答案 3 :(得分:1)
var pickOne = [4,5,6,7,8,9,10,11,12,13],
value = pickOne[Math.floor(Math.random() * pickOne.length)];
value = (Math.random() < 0.5)? value : -value;
console.log(value)
答案 4 :(得分:0)
var sign = Math.round(Math.random()) == 0 ? -1 : 1;
var number = Math.round(Math.random() * 9) + 4;
return sign * number;
答案 5 :(得分:0)
Math.round(Math.random())返回0或1,
所以它可以写成没有中间值:
alert( (Math.ceil(Math.random() * 10) + 3)*(Math.round(Math.random())?1:-1));
答案 6 :(得分:0)
var n = Math.floor(Math.random() * 20) - 10;
n = n < 0 ? n - 3 : n + 4;