Math.random()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Math.random() éææ¹æ³è¿åä¸ä¸ªå¤§äºçäº 0 ä¸å°äº 1 çä¼ªéæºæµ®ç¹æ°ï¼å¹¶å¨è¯¥èå´å
è¿ä¼¼åååå¸ï¼ç¶åä½ å¯ä»¥ç¼©æ¾å°æéçèå´ãå
¶å®ç°å°éæ©éæºæ°çæç®æ³çåå§ç§åï¼å®ä¸è½ç±ç¨æ·éæ©æéç½®ã
夿³¨ï¼Math.random() ä¸è½æä¾å¯ç å¦å®å
¨çéæºæ°ã请ä¸è¦ä½¿ç¨å®ä»¬æ¥å¤çä¸å®å
¨ç¸å
³çäºæ
ãè¯·ä½¿ç¨ Web Crypto API 代æ¿ï¼æ´å
·ä½å°æ¥è¯´æ¯ Crypto.getRandomValues() æ¹æ³ã
å°è¯ä¸ä¸
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
console.log(getRandomInt(3));
// Expected output: 0, 1 or 2
console.log(getRandomInt(1));
// Expected output: 0
console.log(Math.random());
// Expected output: a number from 0 to <1
è¯æ³
Math.random()
åæ°
æ ã
è¿åå¼
ä¸ä¸ªå¨ 0ï¼å æ¬ï¼å° 1ï¼ä¸å æ¬ï¼ä¹é´çä¼ªéæºæµ®ç¹æ°ã
示ä¾
请注æï¼ç±äº JavaScript ä¸çæ°åæ¯ IEEE 754 æµ®ç¹æ°åï¼å
·æåæè¿å¶æ°èå
¥ï¼round-to-nearest-evenï¼çè¡ä¸ºï¼å æ¤ä»¥ä¸å½æ°çèå´ï¼ä¸å
æ¬ Math.random() æ¬èº«ï¼å¹¶ä¸åç¡®ã妿鿩äºé常大çè¾¹çï¼253 ææ´é«ï¼ï¼å¨æç½è§çæ
åµä¸æå¯è½è¾¾å°é常æé¤ï¼usually-excludedï¼çä¸çã
å¾å°ä¸ä¸ªå¤§äºçäº 0 å°äº 1 ä¹é´çéæºæ°
function getRandom() {
return Math.random();
}
å¾å°ä¸ä¸ªä¸¤æ°ä¹é´çéæºæ°
该示ä¾è¿åä¸ä¸ªå¨æå®å¼ä¹é´çéæºæ°ãè¿ä¸ªå¼ä¸å°äºï¼ä¸æå¯è½çäºï¼minï¼å¹¶ä¸å°äºï¼ä¸ä¸çäºï¼maxã
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
å¾å°ä¸ä¸ªä¸¤æ°ä¹é´çéæºæ´æ°
è¿ä¸ªç¤ºä¾è¿åä¸ä¸ªå¨æå®å¼ä¹é´çéæºæ´æ°ãè¿ä¸ªå¼ä¸å°äº minï¼å¦æ min 䏿¯æ´æ°ï¼åä¸å°äº min çåä¸åæ´æ°ï¼ï¼ä¸å°äºï¼ä½ä¸çäºï¼maxã
function getRandomInt(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); // ä¸å
嫿大å¼ï¼å
嫿å°å¼
}
夿³¨ï¼ä¹è®¸å¾å®¹ææ³å°ç¨ Math.round() æ¥å®ç°ï¼ä½æ¯è¿ä¼å¯¼è´ä½ çéæºæ°å¤äºä¸ä¸ªä¸ååçåå¸ï¼è¿å¯è½ä¸ç¬¦åä½ çéæ±ã
å¾å°ä¸ä¸ªä¸¤æ°ä¹é´çéæºæ´æ°ï¼å æ¬ä¸¤ä¸ªæ°å¨å
è½ç¶ä¸é¢ç getRandomInt() 彿°å
嫿å°å¼ï¼ä½ä¸å«æå¤§å¼ãå¦æä½ éè¦ç»æåæ¶å
嫿å°å¼åæå¤§å¼æä¹åï¼ä¸é¢ç getRandomIntInclusive() 彿°å¯ä»¥å®ç°è¿ä¸ç¹ã
function getRandomIntInclusive(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // å
嫿å°å¼åæå¤§å¼
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-math.random> |