2 web 1994 web_1994 于 2016.09.09 22:19 提问

问一下大神为啥这段代码,30这个随机数弹不出来???

function random(min,max)
{
var x = min*Math.random()+(max-min);
x = Math.ceil(x);
return x;
}
for(var i=0;i<=1000;i++)
{
var a = random(30,60);
if(a==30)
alert(a);
}

3个回答

caozhy
caozhy   Ds   Rxr 2016.09.09 22:35

function random(min,max)
{
var x = (max-min+1)*Math.random()+min;
x = Math.ceil(x);
return x;
}

zhuzige521888
zhuzige521888   2016.09.09 22:37

Math.random(); 结果为0-1间的一个随机数(包括0,不包括1)
Math.ceil(n); 返回大于等于n的最小整数。

再看你的程序 var x = min*Math.random()+(max-min); 此时x是一个大于等于30小于60的数
x = Math.ceil(x); 执行此操作后,x是大于等于30的小于60整数
看起来有一定概率,但归根结底概率太低。因为 Math.random();相当于取出一个无限小的数,而等于0的概率可想而知。

guwei4037
guwei4037   Ds   Rxr 2016.09.09 22:53

你写的代码理论上是对的,但正好得到30的概率非常低,你改成31立马就不一样了。

Csdn user default icon
上传中...
上传图片
插入图片