Javascript 正负值之间的随机数
可能重复:Javascript 正负值之间的随机数,javascript,random,numbers,Javascript,Random,Numbers,可能重复: 如何获得介于-99和99之间(不包括0)的随机值 var num = Math.floor(Math.random()*99) + 1; // this will get a number between 1 and 99; num *= Math.round(Math.random()) ? 1 : -1; // this will add minus sign in 50% of cases 总共 var ranNum = Math.ceil(Math.random() *
如何获得介于-99和99之间(不包括0)的随机值
var num = Math.floor(Math.random()*99) + 1; // this will get a number between 1 and 99;
num *= Math.round(Math.random()) ? 1 : -1; // this will add minus sign in 50% of cases
总共
var ranNum = Math.ceil(Math.random() * 99) * (Math.round(Math.random()) ? 1 : -1)
这将返回您想要的内容
function getNonZeroRandomNumber(){
var random = Math.floor(Math.random()*199) - 99;
if(random==0) return getNonZeroRandomNumber();
return random;
}
这是一个函数
编辑
为了给未来的读者做贡献,在用户@MarkDickinson对我发布的第一段代码的评论中发生了一点争论,我决定再次尝试使用Math.floor()
和Math.round()之间的快速比较
函数返回op需要的值
第一个场景:使用var random=Math.round(Math.random()*198)-99代码>(我的第一个建议)
第二个场景:使用var random=Math.floor(Math.random()*199)-99代码>(标记建议)
方法学
由于这是一场简短的辩论,我选择做比较
测试包括运行上述函数100.000次,然后检索极端数99
和-99
相对于其他数字出现的次数,比如33
和-33
然后,测试将给出一个简单的输出,包括99
和-99
的出现百分比以及33
和-33
的出现百分比
它将在Safari 6.0.2的Webkit实现中使用,以给出此答案的输出,但任何人都可以稍后使用您喜爱的浏览器进行测试
第一个场景的结果:
- 正常眼率:0.97%
- 极端眼疾的百分比:0.52%
- 极端眼症相对于正常眼症的百分比:53.4%/确实有一半的几率
第二种情况的结果:
- 正常眼率:1.052%
- 极端眼疾的百分比:0.974%
- 极端眼压相对于正常眼压的百分比:92%//接近标准偏差最小的公平结果
结果可以在这里看到:这里有一个通用的解决方案,可以让您设置边界,并选择加入/退出0
var pos = 99,
neg = 99,
includeZero = false,
result;
do result = Math.ceil(Math.random() * (pos + neg)) - neg;
while (includeZero === false && result === 0);
var pos = 5,
neg = 5,
result;
result = Math.floor(Math.random() * (pos + neg)) - neg;
result = result < 0 ? result : result + 1;
pos
和neg
值都包含在内
这样就不需要平衡正负范围
或者,如果由于单个排除值而担心重新运行,您可以将初始范围减小一,然后将1
添加到任何大于或等于0
的结果中
var pos = 99,
neg = 99,
includeZero = false,
result;
do result = Math.ceil(Math.random() * (pos + neg)) - neg;
while (includeZero === false && result === 0);
var pos = 5,
neg = 5,
result;
result = Math.floor(Math.random() * (pos + neg)) - neg;
result = result < 0 ? result : result + 1;
获取一个典型范围,减去负数,看看数字是否为0
。如果为零,请再次调用该函数…投票关闭的人似乎没有费心使用“排除”这个词。我想你想要199
而不是188
。我想我想要198!只是打字错误!不,如果您希望同时包含-99
和99
作为可能,则需要199
。如果你使用198
,那么99
是不可能出现的(至少,没有任何合理的可能性)。我在回答中的意思是198,但你是对的,它永远不会返回99。因此,我将从Math.floor
更改为Math.round()
,这将解决问题。谢谢你顺便通知我!但是对于Math.round
,-99
和99
的出现概率是其他值的一半!(如果你不相信我,就测试一下:-)你真的想要199
和Math.floor
<代码>位置=1负=1
。你能预测它会浪费多少个循环吗?现在想象一下“差距”比“正确结果”更大。@OlegV.Volkov:通常情况下,这不是每个问题的正确解决方案。但它很容易调整为一个狭窄的范围。当然,对于-1
到1
范围(不包括0
),我们只需执行Math.random()<.5:-1:1代码>所以你需要知道你传递的数字是正数还是负数,而不仅仅是任何范围?(neg-neg或pos-pos)我不熟悉javascript。这里的num*是什么。我的意思是这个概念叫什么,这样我就可以了解它了@LittleSweetSeas@DeepikaRao这是一个简单的乘法,在一个随机数(从0到0.999…)和目标数(在我们的示例中是99)之间,第二个数字应该是“==”而不是“==”line@YikSanChan我可能同意,但由于这些类型是众所周知的(都是整数),因此没有真正的优势,也没有性能提升。我错了吗?:)
result += (result >= 0)