国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js生成隨機數(shù)方法和實例

2019-11-19 17:54:48
字體:
供稿:網(wǎng)友

js生成一切隨機數(shù)的基礎(chǔ)都是Math.random(),這個方法比較特別,生成的隨機數(shù)落在的區(qū)間是[0,1),進行一次操作的話,js只能生成一個類似于[n,m)這樣,左閉右開的區(qū)間。所以當(dāng)有一些特殊需求的時候,就勢必要進行一些其它的操作,下面對各種需求進行簡單的分析:

生成任意區(qū)間的整數(shù)

1.全閉區(qū)間[n,m]

這種的最常見,大家都知道的那一長串公式:Math.floor(Math.random()*(m-n+1))+n;就是生成這個全閉區(qū)間的方法。說到這個公式很多人都知道,但真正想明白的人估計很少。先生成一個[0,m-n+1)這樣左閉右開的區(qū)間,然后用Math.floor()取到[0,m-n]之間內(nèi)的任意整數(shù)(看明白這一步很關(guān)鍵),之后加上區(qū)間左端點變成[n,m]內(nèi)的任意整數(shù),達(dá)到目的。

說到這個地方,有一點必須提一下,隨便搜一下js生成隨機數(shù),有很多文章都會用Math.ceil()Math.round()這兩個方法,比如生成全閉的[n,m]區(qū)間內(nèi)的任意整數(shù),Math.ceil(Math.random()*(m-n))+n;或者Math.round(Math.random()*(m-n))+n;我感覺隨機數(shù),最重要的就是隨機兩個字,每個值取到的概率一定要相等,這一點對于一些特定的場合非常重要,比如抽獎(年會都有抽獎的吧)。

Math.ceil()的毛病是n<<m≈x,x為除端點之外的數(shù),區(qū)間足夠大的話n幾乎取不到,m和x的概率幾乎相等,因為m這個點取不到所以概率相對來說小了一點。Math.round()的毛病是n≈m=x/2,原因和前面的差不多,不明白的可以自己畫個坐標(biāo)軸,很明了。

2.全開區(qū)間(x,y)

其實只要記住上面的全閉區(qū)間,其它所有區(qū)間的開閉,都可以由其推到,過程如下:
(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;

生成任意區(qū)間內(nèi)的浮點數(shù)

這種實際當(dāng)中用到的比較少,但也挺有意思的。

[n,m)

這種最簡單,因為和random的特點保持一致。Math.rondom()*(m-n)+n;

因為random的這種特點,想要取到其它區(qū)間內(nèi)的浮點數(shù)就比較困難了。需要借助一些判斷才能才能滿足要求。思想和上面去整數(shù)的一樣。代碼如下:

    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;    }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 健康| 隆化县| 镇安县| 阜新| 绍兴市| 镇赉县| 新疆| 清水县| 威远县| 天津市| 常宁市| 甘泉县| 浮山县| 永吉县| 依兰县| 台湾省| 阿合奇县| 安阳市| 崇阳县| 鹤壁市| 商洛市| 淮滨县| 许昌县| 贡觉县| 钟山县| 丰镇市| 常德市| 高清| 玉屏| 博湖县| 双城市| 陵川县| 承德县| 青神县| 惠州市| 阿拉善左旗| 曲周县| 邢台县| 济阳县| 开江县| 若羌县|