千家信息网

真的了解js生成随机数吗

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,由js生成一切随机数的基础都是Math.random(),这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间。所以当有一些特殊
千家信息网最后更新 2026年10月31日真的了解js生成随机数吗

由js生成一切随机数的基础都是Math.random(),这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间。所以当有一些特殊需求的时候,就势必要进行一些其它的操作,下面对各种需求进行简单的分析:


生成任意区间的整数

  1. 全闭区间[n,m]

    这种的最常见,大家都知道的那一长串公式:Math.floor(Math.random()*(m-n+1))+n; 就是生成这个全闭区间的方法。说到这个公式很多人都知道,但真正想明白的人估计很少。先生成一个[0,m-n+1)这样左闭右开的区间,然后用Math.floor()取到[0,m-n]之间内的任意整数(看明白这一步很关键),之后加上区间左端点变成[n,m]内的任意整数,达到目的。

    说到这个地方,有一点必须提一下,随便搜一下js生成随机数,有很多文章都会用Math.ceil()或Math.round()这两个方法,比如生成全闭的[n,m]区间内的任意整数,Math.ceil(Math.random()*(m-n))+n;或者Math.round(Math.random()*(m-n))+n;我感觉随机数,最重要的就是随机两个字,每个值取到的概率一定要相等,这一点对于一些特定的场合非常重要,比如抽奖(年会都有抽奖的吧)。Math.ceil()的毛病是n<Math.round()的毛病是n=m=x/2,原因和前面的差不多,不明白的可以自己画个坐标轴,很明了。

  2. 全开区间(x,y)

    其实只要记住上面的全闭区间,其它所有区间的开闭,都可以由其推到,过程如下:
    (x,y) ==[x+1,y-1];也就是说n=x+1; m=y-1;将其代入上面的公式就可以得到:Math.floor(Math.random()*(y-x-1))+x+1;

  3. 左闭右开[x,y)

    同理,[x,y) == [x,y-1];代入得到:Math.floor(Math.random()*(y-x))+x;

  4. 左开右闭(x,y]

    (x,y]==[x+1,y];代入得到:Math.floor(Math.random()*(y-x))+x+1;


生成任意区间内的浮点数

这种实际当中用到的比较少,但也挺有意思的。

  • [n,m)

    这种最简单,因为和random的特点保持一致。Math.rondom()*(m-n)+n;

  • 因为random的这种特点,想要取到其它区间内的浮点数就比较困难了。需要借助一些判断才能才能满足要求。思想和上面去整数的一样。代码如下:

        function fullClose(n,m) {  //[n,m]            var result = Math.random()*(m+1-n)+n;            while(result>m) {                result = Math.random()*(m+1-n)+n;            }            return result;        }        function fullOpen(n,m) { // (n,m)            var result = Math.random()*(m-n)+n;            while(result == n) {                result = Math.random()*(m-n)+n;            }            return result;        }        function leftOpen(n,m) { // (n,m]            var result = Math.random()*(m-n+1)+n-1;            while(result


区间 生成 整数 随机数 公式 方法 概率 重要 两个 就是 毛病 点数 特点 端点 需求 面的 特殊 一致 困难 必要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 深圳九邦互联网科技有限公司 高科技互联网 科技金融是不是互联网金融 西安互联网科技 卓越科技(互联网 ) 朗涯互联网科技 上海喔噻互联网科技 伴你行互联网科技有限公司 互联网科技博主是什么意思 中国互联网有什么科技含量 福州新华互联网科技学校 知乎 宁夏众和广鑫互联网科技有限公司 受益于互联网科技的高速发展 河南猎农互联网科技有限公司 智腾互联网科技有限公司 中和天地互联网科技有限公司 互联网时代科技型公司的机会 银川新华互联网科技学校原画 科技互联网专业务虚会材料 互联网 卓越科技 亿策互联网科技 天扬科技互联网广告 深圳国际航运科技和互联网 成都互联网科技公司工作好不好 乌苏新华互联网科技做什么的 山东子淼互联网科技有限公司 富国互联网科技002692 中国新注册互联网科技 科技互联网专业务虚会材料
0