负值和正值之间的随机数

时间:2012-11-19 13:42:09

标签: javascript random numbers

  

可能重复:
  Generating random numbers in Javascript in a specific range?

如何在-99到99之间获得一个随机值,不包括0?

3 个答案:

答案 0 :(得分:35)

var num = Math.floor(Math.random()*99) + 1; // this will get a number between 1 and 99;
num *= Math.floor(Math.random()*2) == 1 ? 1 : -1; // this will add minus sign in 50% of cases

答案 1 :(得分:5)

这会返回您想要的内容

function getNonZeroRandomNumber(){
    var random = Math.floor(Math.random()*199) - 99;
    if(random==0) return getNonZeroRandomNumber();
    return random;
}

这是一个功能fiddle

修改

为了给未来的读者做出贡献,在用户@MarkDickinson对我发布的第一个代码作出了相关贡献的评论中发生了一些争论,我决定用另一个小提琴来快速比较使用{{ 1}}和Math.floor()函数返回操作所需的值。

第一个场景:使用Math.round()(我的第一个建议)

var random = Math.round(Math.random()*198) - 99;

第二种情况:使用function getNonZeroRandomNumberWithMathRound(){ var random = Math.round(Math.random()*198) - 99; if(random==0) return getNonZeroRandomNumber(); return random; } (标记建议)

var random=Math.floor(Math.random()*199) - 99;

<强>方法

由于这是一场简短的辩论,我选择fiddle.net进行比较。

测试包括运行上述功能100.000次,然后检索极限数字function getNonZeroRandomNumberWithMathFloor(){ var random = Math.floor(Math.random()*199) - 99; if(random==0) return getNonZeroRandomNumber(); return random; } 99与其他数字相对的次数,让我们说{{1} }和-99

然后,测试将给出一个简单的输出,其中包括33-33的出现百分比以及99-99出现的百分比。

它将使用33中的Webkit实现来提供此答案的输出,但任何人都可以在fiddle.net

后期使用您喜欢的浏览器进行测试

第一种情况的结果:

  • 正常发生率的百分比:0.97%
  • 极端发生率:0.52%
  • 相对于正常发生的极端发生率的百分比:53.4%//确实有一半的可能性

第二种情况的结果:

  • 正常发生率:1.052%
  • 极端发生率:0.974%
  • 极端发生率相对于正常发生率的百分比:92%//更接近标准差的最小结果

结果可以在这里看到:http://jsfiddle.net/brunovieira/LrXqh/

答案 2 :(得分:2)

这是一个通用解决方案,可让您设置边界,并选择加入/退出包含0

var pos = 99,
    neg = 99,
    includeZero = false,
    result;

do result = Math.ceil(Math.random() * (pos + neg)) - neg;
while (includeZero === false && result === 0);

posneg值包含在内。

这样就不需要平衡正负范围了。


或者,如果您担心因单个排除值而重新运行,则可以将初始范围减去1,并将1添加到大于或等于0的任何结果中

var pos = 5,
    neg = 5,
    result;

result = Math.floor(Math.random() * (pos + neg)) - neg;
result = result < 0 ? result : result + 1;

如果您愿意,最后一行可能会缩短:

result += (result >= 0)