可能重复:
Generating random numbers in Javascript in a specific range?
如何在-99到99之间获得一个随机值,不包括0?
答案 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
第一种情况的结果:
第二种情况的结果:
结果可以在这里看到: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);
pos
和neg
值包含在内。
这样就不需要平衡正负范围了。
或者,如果您担心因单个排除值而重新运行,则可以将初始范围减去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)