负值和正值之间的随机数

use*_*929 17 javascript random numbers

可能重复:
在特定范围内的Javascript中生成随机数?

我怎样才能得到一个随机值,例如,从-99到99,不包括0?

Lit*_*eas 40

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
Run Code Online (Sandbox Code Playgroud)

  • @DeepikaRao 这是一个简单的乘法,在随机数(从 0 到 0.999 ...)和目标数(在我们的示例中为 99)之间 (2认同)

Bru*_*ira 5

这将返回您想要的

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

这是一个实用的小提琴

编辑

为了为将来的读者做出贡献,用户@MarkDickinson对我发布的第一个代码做出了一些确实有意义的贡献,而在注释中进行了一些辩论,我决定在使用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;
}
Run Code Online (Sandbox Code Playgroud)

第二种情况:使用var random=Math.floor(Math.random()*199) - 99;(标记建议)

function getNonZeroRandomNumberWithMathFloor(){
    var random = Math.floor(Math.random()*199) - 99;
    if(random==0) return getNonZeroRandomNumber();
    return random;
}
Run Code Online (Sandbox Code Playgroud)

方法

由于辩论时间很短,因此我选择了fiddle.net进行比较。

该测试包括运行上述功能100.000次,然后检索极限数99-99另一个数相对应出现的次数,例如33-33

然后,测试将给出一个简单的输出由来自露面的百分比99-99和的出场率33-33

它将用于Webkit实现,Safari 6.0.2并从此答案给出输出,但是任何人都可以在fiddle.net上使用您喜欢的浏览器进行测试。

第一种情况的结果:

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

第二种情况的结果:

  • 正常发生率:1.052%
  • 极高发生率:0.974%
  • 相对于正常发生,极端发生的百分比:92%//具有最小标准偏差的公平结果的接近

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

  • 我想您要的是199,而不是188。 (2认同)