javascript / jquery在-13和13之间的随机数,不包括-3到3之间的数字

时间:2012-02-16 12:48:16

标签: javascript jquery random

我正在使用

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个。

7 个答案:

答案 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显示工作副本:

http://jsfiddle.net/adamh/cyGwf/

答案 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();
​

这是a working fiddle

或者@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;