Math.round与Math.floor在取随机数时的区别

2017-11-16  本文已影响0人  留白的未来

这是个很无聊的测试

//生成个随机数
Math.random();
//生成整数n到m
Math.round(Math.random() * (m - n) + n);
Math.floor(Math.random() * (m - n + 1) + n);

当然也可以用 Math.ceil()


//分别用两种方法生成一组n到m的随机数,并放入数组
var n = 3,m = 8;
for(var i = 0, arr1 = [], arr2 = []; i < 1000000; i++) {
    arr1[i] = Math.round(Math.random() * (m - n) + n);
    arr2[i] = Math.floor(Math.random() * (m - n + 1) + n);
}
//封装个函数,统计n到m各整数出现的次数
function cNums(arr, n) {
    for(var i = 0, j = 0; i < arr.length; i++) {
        if(arr[i] == n) {j++;}
    }return j;
}
//再封装一个测试函数
function csgl(arr) {
    for(var i = n; i <= m; i++) {
        var cs = cNums(arr, i);
        document.write(i + "出现了" + cs + "次<br />");
    }
}
//ok,开始测试,F5.......
document.write("Math.round<br />");
csgl(arr1);
document.write("Math.floor<br />");
csgl(arr2);

出乎我的意料,结果和我想的 完全相反:

Math.round
3出现了100239次
4出现了199372次
5出现了200600次
6出现了199740次
7出现了200185次
8出现了99864次
Math.floor
3出现了165825次
4出现了166928次
5出现了167070次
6出现了166796次
7出现了166612次
8出现了166769次


这是为什么呢?

上一篇下一篇

猜你喜欢

热点阅读