这是我在学JavaScript的一个课后作业。
为什么choices要加1?请往下面看
利用Math.floor()来实现
// 利用 Math.random() 从某个整数范围内随机选择一个值
// 值 = Math.floor( Math.random()*可能值的总数 + 第一个可能的值 )
// 取一个 2 到 10 的整数(中间有9个整数)
var num = Math.floor( Math.random()*9 + 2 )
// 取一个 start 到 end 的整数
function getRandomNumber( start , end ){
var choices = end - start + 1; // 取得从 start 到 end 所有整数的个数(包括 start 和 end )
return Math.floor( Math.random()*choices + start );
}
var RandomNumber = getRandomNumber( 0 , 9 );
alert( RandomNumber );
为什么choices要加1?请往下面看
Math.random(); //[0,1)
Math.random()*(end-start); //[0,end-start);
Math.random()*(end-start)+start; //[start,end);
Math.floor(Math.random()*(end-start)+start);
//{ x | x>=start,x<end,x∈N}
//如果不 +1 的话就取不到 end 了
为什么不用parseInt() ?
1、parseInt()接受的参数是字符串;
2、而 Math.random() 返回的是一个大于等于 0 ,小于 1 的数值,将数值传入 parseInt() 的时候,会将数字转换成字符串;
3、而在默认情况下,ECMAScript 会将那些小数点后面带有 6个零以上的浮点数值转换为以 e表示法 表示的数值。
alert( parseInt(0.00000001) ) // 1
/*
* 因为0.0000001被转换成字符串时变成"1e-8"
* 所以变成parseInt("1e-8")
* 这样的话输出整数的概率就不一定一样了
*/