欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年01月17日 08:46:41   作者:夜未央0906  
這篇文章主要介紹了js生成隨機(jī)數(shù)方法和實(shí)例,由js生成一切隨機(jī)數(shù)的基礎(chǔ)都是Math.random(),有興趣的可以了解一下。

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

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

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

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

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

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

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

其實(shí)只要記住上面的全閉區(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)的浮點(diǎn)數(shù)

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

[n,m)

這種最簡單,因?yàn)楹蛂andom的特點(diǎn)保持一致。Math.rondom()*(m-n)+n;

因?yàn)閞andom的這種特點(diǎn),想要取到其它區(qū)間內(nèi)的浮點(diǎn)數(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)同時(shí)上傳多張圖片

    微信小程序?qū)崿F(xiàn)同時(shí)上傳多張圖片

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)同時(shí)上傳多張圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • js?剪切、復(fù)制、粘貼功能實(shí)現(xiàn)

    js?剪切、復(fù)制、粘貼功能實(shí)現(xiàn)

    Navigator.clipboard?API可以用來訪問系統(tǒng)剪貼板,可以實(shí)現(xiàn)【剪切、復(fù)制、粘貼】功能。該?API?被設(shè)計(jì)用來取代使用?document.execCommand()?的剪貼板訪問方式,不兼容?IE
    2023-05-05
  • webpack4.x CommonJS模塊化淺析

    webpack4.x CommonJS模塊化淺析

    這篇文章主要介紹了webpack4.x CommonJS模塊化淺析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Javascript數(shù)組的?forEach?方法詳細(xì)介紹

    Javascript數(shù)組的?forEach?方法詳細(xì)介紹

    這篇文章主要介紹了Javascript數(shù)組的forEach方法詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 微信小程序錯(cuò)誤this.setData報(bào)錯(cuò)及解決過程

    微信小程序錯(cuò)誤this.setData報(bào)錯(cuò)及解決過程

    這篇文章主要介紹了微信小程序錯(cuò)誤this.setData報(bào)錯(cuò)及解決過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • js隱藏與顯示回到頂部按鈕及window.onscroll事件應(yīng)用

    js隱藏與顯示回到頂部按鈕及window.onscroll事件應(yīng)用

    現(xiàn)在大多數(shù)網(wǎng)站都會(huì)添加這種功能:當(dāng)滾動(dòng)條滾動(dòng)到頁面的下方時(shí),頁面的右下角會(huì)顯示出來一個(gè)“回到頂部”的按鈕或連接;那么,如何控制“回到頂部”按鈕的顯示或隱藏呢;本文介紹詳細(xì)實(shí)現(xiàn)方法,感興趣的你可不要走開哦
    2013-01-01
  • JavaScript實(shí)現(xiàn)查找字符串中第一個(gè)不重復(fù)的字符

    JavaScript實(shí)現(xiàn)查找字符串中第一個(gè)不重復(fù)的字符

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)查找字符串中第一個(gè)不重復(fù)的字符,需要的朋友可以參考下
    2014-12-12
  • js實(shí)現(xiàn)內(nèi)容顯示并使用json傳輸數(shù)據(jù)

    js實(shí)現(xiàn)內(nèi)容顯示并使用json傳輸數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)內(nèi)容顯示并使用json傳輸數(shù)據(jù)的方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JS Array對(duì)象入門分析

    JS Array對(duì)象入門分析

    每天一對(duì)象,今天我們也來new一個(gè)。沒有系統(tǒng)的學(xué)過JS,沒有特別的寫過一個(gè)比較出色的類庫,沒有運(yùn)用過一個(gè)很強(qiáng)的類庫,prototype.js在進(jìn)行著,慢慢的前進(jìn)相信不久的將來就可以應(yīng)用prototype.js來開發(fā)自己的應(yīng)用程序了。
    2008-10-10
  • 使用layui的layer組件做彈出層的例子

    使用layui的layer組件做彈出層的例子

    今天小編就為大家分享一篇使用layui的layer組件做彈出層的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評(píng)論