由
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)公司是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!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ū)間[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<
全開區(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;
左閉右開[x,y)
同理,[x,y) == [x,y-1];代入得到:Math.floor(Math.random()*(y-x))+x;
左開右閉(x,y]
(x,y]==[x+1,y];代入得到:Math.floor(Math.random()*(y-x))+x+1;
這種實(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另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:真的了解js生成隨機(jī)數(shù)嗎-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/djgphd.html