中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js生成隨機數方法和實例

發布時間:2020-10-06 21:22:02 來源:腳本之家 閱讀:145 作者:夜未央0906 欄目:web開發

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<<m≈x,x為除端點之外的數,區間足夠大的話n幾乎取不到,m和x的概率幾乎相等,因為m這個點取不到所以概率相對來說小了一點。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<n) {
        result = Math.random()*(m-n+1)+n-1;
      }
      return result;
    }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和静县| 游戏| 灯塔市| 怀远县| 溆浦县| 互助| 宁乡县| 泽库县| 类乌齐县| 桂林市| 渭南市| 娄烦县| 博客| 山阳县| 攀枝花市| 禄丰县| 金山区| 吴忠市| 莱阳市| 酉阳| 武义县| 布尔津县| 竹溪县| 大同县| 甘孜| 黎城县| 安庆市| 丹棱县| 西乡县| 广丰县| 永德县| 云南省| 新源县| 青铜峡市| 原平市| 大庆市| 兴化市| 泰州市| 秭归县| 偏关县| 丹棱县|