Math.floor(Math.random()*2)
返回1或0.但是,我不认为它有50%的机会产生任何一个。更好的想法?谢谢
答案 0 :(得分:5)
如果您不相信,请检查:
<script type="text/javascript">
var total = 0;
var ones = 0;
for (var i = 0; i < 100000; i++, total++) {
ones += Math.floor(Math.random()*2);
}
alert(ones/total);
</script>
这段代码给了我0.49972 - 非常接近50%。
答案 1 :(得分:4)
它应该给你均匀分配。
var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a);
您可以通过复制粘贴到地址栏来尝试:
javascript:var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a);
答案 2 :(得分:3)
试一试:
<script type="text/javascript">
var zero=0;
var one=0;
for (var i=0;i<1000000;i++)
{
var num=Math.floor(Math.random()*2)
if (num) zero++;
if (!num) one++;
}
document.write("Zero: "+zero+"<br />");
document.write("One: "+one+"<br />");
</script>
你正在寻找这种情况下的答案,这些答案在一百万的平方根范围内是好的。即如果你得到真正随机的数字,你希望结果是500,000 + - 1000。
答案 3 :(得分:1)
它足够接近50%,如果你担心差异(如果确实存在差异),你首先不会使用伪随机数: - )
运行一个包含1000万次迭代的循环,我得到的比率为5,000,931到4,999,069,这个错误只有万分之一(0.00931%)。
答案 4 :(得分:0)
它产生0或1的机会相等。
但你为什么不用:
Math.round(Math.random())
?您是否希望能够更改为生成0,1,2,...,N?如果是这样,请继续执行。
答案 5 :(得分:0)
任何一个结果的机会恰好是50%。是什么让你觉得它不是?