美文网首页web前端开发让前端飞
js获取[n,m]的随机整数值

js获取[n,m]的随机整数值

作者: 88b61f4ab233 | 来源:发表于2018-11-03 22:12 被阅读1次

1.需要用到的方法:

Math.random:取大于等于0到小于1之间的随机数;

Math.floor:向下取整;

Math.ceil:向上取整;

2.看了一个面试题,要求有个函数fn,参数为n,需要返回[2,32]之间的n个整数。第一次写的时候如下:

var fn=function(n){
    var arr=[],num;
    for(var i=0;i<n&&n<32;i++){
        num=Math.floor(Math.random()*30+2);
        if(arr.indexOf(num)===-1){
            arr.push(num);
        }else{
            i--;
        }
    }
    return arr;
};
var a=fn(3);
console.log(a.sort());

然后发现2到32包含2和32的时候是有31位数字的,在这里我取错了只是[2,32);然后才查了下random时大于等于0小于1的数,所以向下取整时始终是小于1*30+2的即32。

而题目是要求包含2和32,我就想向上取整不就有了32,同时当随机数为0时也就有2了,就有了如下的代码:

var fn=function(n){
    var arr=[],num;
    for(var i=0;i<n&&n<32;i++){
        num=Math.ceil(Math.random()*30+2);
        if(arr.indexOf(num)===-1){
            arr.push(num);
        }else{
            i--;
        }
    }
    return arr;
};
var a=fn(31);
console.log(a.sort());

然后运行,没有结果浏览器卡住了,类似陷入死循环。我想了下才发现自己犯了个很低级的错误,等于2的时候只有random的值为0,而如果随机数是随机的无法确保什么时候为0,如果一直没取到0,就会一直i--,直到有0为止。运气不好就会运行很久。所以改了代码如下:

var fn=function(n){
    var arr=[],num;
    for(var i=0;i<n&&n<32;i++){
        num=Math.floor(Math.random()*31+2);
        if(arr.indexOf(num)===-1){
            arr.push(num);
        }else{
            i--;
        }
    }
    return arr;
};
var a=fn(31);
console.log(a.sort());

改成向下取整当random的值小于1/31时,向下取整为0,这样就得到2了,而这样的区间比只是一个0的概率大的多,而最大数始终小于1*31+2,向下取整后就是32。

总结:

a.Math.random是取[0,1)的数;

b.取[min,max]的随机整数时使用如下公式:

  Math.floor(Math.random().(max-min+1)+min)

c.取[min.max)的随机整数时使用如下公式:

  Math.floor(Math.random().(max-min)+min)

d.取(min,max]的随机整数时使用如下公式:

  Math.floor(Math.random().(max-min)+min+1)

上面的是由(min,max]即[min+1,max]代入b的公式算出来就可以。

e.不要使用ceil,因为无法控制Math.random()什么时候为0,同理如下:

  Math.ceil(Math.random().(max-min+1)+min)

好像是取(min,max]之间的值,但是不清楚什么时候就会取到min。使用random的取随机整数的时候使用向下取整。

相关文章

  • js获取[n,m]的随机整数值

    1.需要用到的方法: Math.random:取大于等于0到小于1之间的随机数; Math.floor:向下取整;...

  • JavaScript技巧

    获取变量布尔值 小数取整 生成m到n的数组 获取时间戳 数字转字符串 生成[m, n)的随机数

  • Oracle常见函数

    数值函数ROUND(n[,m]),省略m时为0,m>0时,保留小数点后m位,m<0时小数点前m位四舍五入 取整函数...

  • JS 生成区间随机数

    js生成[n,m]的随机数 // max - 期望的最大值// min - 期望的最小值parseInt(Math...

  • my javascript library

    暂存一些常用js函数 获取url参数名 用法: input:参数名 output: url参数值,如果没有则返回n...

  • Random

    生成0~100之间的随机数 生成[0,1]之间均匀分布的随机数 产生任意范围的随机数(范围:[m,n]) [m,n...

  • 随机数字的4种取值

    本文讲解如何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备。Math.random()函数...

  • 61.Android开发:随机生成m个[0, n)之间的不重复随

    场景 需要随机生成m个[0, n)之间的不重复随机数; 解决方案 count即是上面的m;endNum即是上面的n;

  • 获取n-m之间的随机数

  • 随机数

    转载 使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备。Math.random()函数返回0...

网友评论

    本文标题:js获取[n,m]的随机整数值

    本文链接:https://www.haomeiwen.com/subject/rlslxqtx.html