जावास्क्रिप्ट में दो नंबरों के बीच यादृच्छिक संख्या उत्पन्न करें


1795

क्या जावास्क्रिप्ट में एक निर्दिष्ट सीमा (जैसे 1 से 6: 1, 2, 3, 4, 5, या 6) में यादृच्छिक संख्या उत्पन्न करने का एक तरीका है?


12
Math.floor (Math.random (* * 7)
Amjad Masad

65
ज़रूर .. Math.floor (Math.random (* * 6 + 1)
अमजद मसा

3
नबील कदीमी ने नकारात्मक यादृच्छिक संख्याओं को भी उत्पन्न करने के बारे में एक लेख लिखा ।
madc

यहाँ एक उपयोगी सार है: gist.github.com/kerimdzhanov/7529623
Dan KK

क्यों इस तरह एक समाधान Math.floor((Math.random()*10)+1);आप के लिए w3schools.com/jsref/jsref_random.asp पर निर्दिष्ट नहीं कर सकता है ..?
शशवत

जवाबों:


2115

जरूरी

निम्न कोड केवल तभी काम करता है जब न्यूनतम मूल्य हो 1। यह इसके अलावा न्यूनतम मूल्यों के लिए काम नहीं करता है 1

यदि आप 1 ( और केवल 1 ) और 6 के बीच एक यादृच्छिक पूर्णांक प्राप्त करना चाहते हैं , तो आप गणना करेंगे:

Math.floor(Math.random() * 6) + 1  

कहाँ पे:

  • 1 स्टार्ट नंबर है
  • 6 संभावित परिणामों की संख्या है (1 + प्रारंभ (6) - अंत (1) )

45
जबकि यह काम करेगा, @ माइक, यह अधिक सामान्य संस्करण को इंगित करने के लिए सबसे अच्छा होगा क्योंकि फ्रांसिस्क के नीचे :-) है।
रेमंड मचिरा

58
-1। Googling के बाद मुझे यह सवाल मिला "शीर्षक जावास्क्रिप्ट में दो संख्याओं के बीच यादृच्छिक मूल्य उत्पन्न करता है"। यदि शून्य मान 0 है
Ydhem

18
यदि आप दो बड़ी संख्याओं के बीच एक संख्या चाहते हैं तो काम नहीं करता है। Math.floor (Math.random (* * 900) + 700
Rob

14
यह केवल तभी काम करता है जब न्यूनतम 1 होता है। यदि मिनट 2 है और हम अभी भी Math.floor(Math.random() * 6) + 2इसका उपयोग करते हैं तो इसका मतलब है कि यदि Math.random()0.99 में परिणाम हमारे यादृच्छिक मूल्य होंगे7
एंटीटॉक्सिक

27
यह कोड अच्छा नहीं है क्योंकि, किसी भी संख्या के साथ काम नहीं करता है। @Francisc कोड सही है।
सिंह राजा

2283
function randomIntFromInterval(min, max) { // min and max included 
  return Math.floor(Math.random() * (max - min + 1) + min);
}

यह "अतिरिक्त" क्या करता है यह यादृच्छिक अंतराल की अनुमति देता है जो 1 से शुरू नहीं होता है। इसलिए आप उदाहरण के लिए 10 से 15 तक यादृच्छिक संख्या प्राप्त कर सकते हैं। लचीलापन।


5
यह भी बहुत अच्छा है क्योंकि अगर कोई toarg को शामिल नहीं करता है , तो fromarg अधिकतम के रूप में दोगुना हो जाता है
जेसन

12
हैलो। यह MDN से है: Returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive), which you can then scale to your desired range.( developer.mozilla.org/en-US/docs/JavaScript/Reference/… )
फ्रांसिस

5
उपरोक्त टिप्पणी पढ़ें। रैंडम [0,1] के अंदर है, न कि [0,1]।
फ्रांसिस्क

3
यदि निम्न संख्या 0. है तो महान काम करता है
रॉबिन ज़िमरमैन

2
ध्यान दें कि यह समाधान केवल तभी सही है जब न्यूनतम और अधिकतम पूर्णांक हैं, अन्यथा आप अंतराल [मिनट, छत (अधिकतम)] में परिणाम प्राप्त कर सकते हैं। यानी आप एक परिणाम प्राप्त कर सकते हैं जो कि सीमा से बाहर है क्योंकि अधिकतम से अधिक है।
कोलीमारको

326

Math.random ()

मिनट ( शामिल ) और अधिकतम ( शामिल ) के बीच एक पूर्णांक यादृच्छिक संख्या देता है :

function randomInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

या मिनट ( शामिल ) और अधिकतम ( शामिल नहीं ) के बीच कोई यादृच्छिक संख्या :

function randomNumber(min, max) {
  return Math.random() * (max - min) + min;
}

उपयोगी उदाहरण (पूर्णांक):

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

** और हमेशा याद दिलाया जाना अच्छा है (मोज़िला):

Math.random () क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या प्रदान नहीं करता है। सुरक्षा से संबंधित किसी भी चीज के लिए उनका उपयोग न करें। इसके बजाय वेब क्रिप्टो एपीआई का उपयोग करें, और अधिक सटीक रूप से window.crypto.getRandomValues ​​() विधि।


कुछ ऐसा है जो मुझे भ्रमित करता है ... Math.floor (..) यह सुनिश्चित करता है कि संख्या एक पूर्णांक है जहां Math.round (..) एक असमान वितरण देगा। Ref: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
alikuli

1
मुझे इस जवाब पर भरोसा है। क्या कोई इस बात का लिंक या स्पष्ट स्पष्टीकरण दे सकता है कि यह क्यों काम करता है? शायद एक उदाहरण कि मैथ.वार्ड किस तरह एक पूर्वाग्रह देगा, और इसका मतलब है कि हमें इस जटिल-जटिल फॉर्मूला का उपयोग करना होगा?
रॉबिन एंड्रयूज

6
@alikuli की एक श्रृंखला के लिए [1,2], वहाँ 25% मौका है Math.random()कि आप इन में से एक से एक नंबर देना होगा [0,0.49], [0.5,0.99], [1,1.49], [1.5,1.99]। उन अंतरालों को गोल करने के परिणामस्वरूप 0, 1, 1, 2 होगा जो कि एक समान वितरण नहीं है। उन्हें फर्श पर रखने से 0, 0, 1, 1. में परिणाम होता है
भिक्षु

1
@shuji यह है दूसरों के बीच में, सही जवाब। मैं सिर्फ यह स्पष्ट करना चाहता था कि Math.roundओवर का उपयोग करने से Math.floorअलग परिणाम क्यों मिलेगा।
मुनकापिश

सबसे सटीक समाधान मैंने पाया: function getRandomInt(min, max) { return Math.round((min - 0.5) + Math.random() * (max - min + 1)); }
सादिक

91

अन्य उपाय:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

ऑनलाइन कोशिश करें


6
क्या आप ~~ सिंटैक्सिस को समझाने (या संदर्भ देने) का मन करेंगे? मैंने इसे पहले नहीं देखा है! सुरुचिपूर्ण समाधान लेकिन समझने में कठिन।
डिएगोडीडी

27
डबल टिल्ड ~~a और बिटवाइज़ OR ((0)) तेजी से लिखने के तरीके हैं Math.floor (a)
edi9999

7
a | 0स्ट्रिंग को पूर्णांक में परिवर्तित करने का सबसे तेज़ और सबसे अनुकूलित तरीका भी है। यह केवल पूर्णांक ( "444"और "-444") वाले स्ट्रिंग्स के साथ काम करता है , अर्थात कोई फ़्लोट्स / अंश नहीं। यह 0हर चीज के लिए उपज देता है जो विफल हो जाती है। यह asm.js. के पीछे मुख्य अनुकूलन में से एक है
पिलाउ

3
नोट: यदि आप कुछ बहुत बड़ी संख्या के साथ काम कर रहे हैं तो डबल टिल्ड काम नहीं कर रहा है। कोशिश करें ~~(Math.random() * (50000000000000 - 0 + 1)) + 0औरMath.floor(Math.random() * (50000000000000 - 0 + 1)) + 0
ब्रूनोएलएम

3
"डबल टिल्ड और बिटवाइज़ या / मैथ डॉट फ्लोर लिखने के तेज़ तरीके हैं" एक खूबसूरत तुकबंदी वाला युगल है जो आज सुबह चमका। धन्यवाद @ edi9999!
टेडेय

60

टी एल; डॉ

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}

यादृच्छिक संख्या प्राप्त करने के लिए generateRandomInteger(-20, 20);

शोषण कम

हम एक यादृच्छिक पूर्णांक मिलता है, कहने की जरूरत है एक्स न्यूनतम और अधिकतम के बीच।

सही?

अर्थात मिनट <= एक्स <= अधिकतम

यदि हम समीकरण से न्यूनतम घटाते हैं, तो यह बराबर है

0 <= (एक्स - मिनट) <= (अधिकतम - मिनट)

अब, इसे एक यादृच्छिक संख्या r के साथ गुणा करने देता है जो है

0 <= (एक्स - मिनट) * आर <= (अधिकतम - मिनट) * आर

अब, समीकरण में वापस मिनट जोड़ने की सुविधा देता है

मिनट <= मिनट + (एक्स - मिनट) * आर <= मिनट + (अधिकतम - मिनट) * आर

अब, चलो एक समारोह चुना है, जिसमें परिणाम आर ऐसी है कि वह संतुष्ट के रूप में हमारे समीकरण रेंज [मिनट, अधिकतम]। यह तभी संभव है जब 0 <= r <= 1 हो

ठीक। अब, आर की सीमा अर्थात [0,1] गणित परिणाम () फ़ंक्शन के परिणाम के समान है। है ना?

Math.random () फ़ंक्शन एक फ्लोटिंग-पॉइंट, छद्म-यादृच्छिक संख्या को रेंज [0, 1) में लौटाता है; वह है, 0 से (समावेशी) तक लेकिन 1 (अनन्य) सहित नहीं

उदाहरण के लिए,

केस आर = 0

min+ ० * ( max- min) = मि

केस आर = 1

min+ 1 * ( max- min) = अधिकतम

Math.random 0 <= r <1 का उपयोग कर रैंडम केस

min+ r * ( max- min) = X , जहां X की न्यूनतम सीमा <= X <है अधिकतम है

उपरोक्त परिणाम X एक यादृच्छिक संख्या है। हालांकि Math.random () के कारण हमारी बाईं बाउंड समावेशी है, और दाईं बाउंड अनन्य है। अपने सही बाउंड को शामिल करने के लिए हम सही बाउंड को 1 से बढ़ाते हैं और परिणाम को फ्लोर करते हैं।

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max + 1 - min))
}

यादृच्छिक संख्या प्राप्त करने के लिए

generateRandomInteger(-20, 20);



24
var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;

2
वास्तव में। मैं भूल गया था रांड 0 समावेशी था। ठीक कर दिया।
ryebr3ad

3
यह हिस्सा Pseudocode है ... कोई सोच सकता है कि यह वास्तविक है और इसे उसी तरह उपयोग करने का प्रयास करें।
गुरूवार

35
@ ग्रेविटीबॉय आप किस बारे में बात कर रहे हैं? यदि कोई व्यक्ति [नंबर चुनें ...] के लिए एक नंबर नहीं बदल सकता है, तो वे प्रोग्रामर के रूप में उपयुक्त नहीं हो सकते हैं।
ryebr3ad

7
@ ryebr3ad -1! यह जावास्क्रिप्ट कोड में नहीं छद्म कोड में कहा गया है और यह भी नहीं सभी पाठकों प्रोग्रामर पूरा कर रहे हैं। कई शुरुआती हैं!
स्टीव

3
@ ryebr3ad: मेरे पास एक सह-कार्यकर्ता है जो एक डेटाबेस वातावरण के बारे में प्रशिक्षुओं को सिखा रहा था, जिसे उन्हें समर्थन की आवश्यकता होगी। उसने उन्हें एक टेबल के बाहर सब कुछ का चयन करने के लिए कहा और उन्होंने एसक्यूएल क्वेरी संपादक में "राइट आउट ऑफ ... ..." लिखना शुरू कर दिया। आपकी वही प्रतिक्रिया थी।
एलेसेडिल

22

jsfiddle: https://jsfiddle.net/cyGwf/477/

रैंडम पूर्णांक : के बीच एक यादृच्छिक पूर्णांक प्राप्त करने के लिए minऔर max, निम्न कोड का उपयोग करें

function getRandomInteger(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}

रैंडम फ्लोटिंग पॉइंट नंबर : के बीच एक रैंडम फ्लोटिंग पॉइंट नंबर पाने के लिए minऔर max, निम्न कोड का उपयोग करें

function getRandomFloat(min, max) {
  return Math.random() * (max - min) + min;
}

संदर्भ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random


14

गणित मेरा मजबूत बिंदु नहीं है, लेकिन मैं एक ऐसी परियोजना पर काम कर रहा हूं, जहां मुझे सकारात्मक और नकारात्मक दोनों के बीच बहुत सारे यादृच्छिक संख्याएं उत्पन्न करने की आवश्यकता है।

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}

उदाहरण के लिए

randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)

बेशक, आप यह सुनिश्चित करने के लिए कुछ सत्यापन भी जोड़ सकते हैं कि आप संख्याओं के अलावा किसी अन्य चीज़ के साथ ऐसा नहीं करते हैं। यह भी सुनिश्चित करें कि न्यूनतम हमेशा अधिकतम से कम या उसके बराबर हो।


5
यह केवल गलत है। min + Math.random() * maxआपको मिन और मिन + मैक्स के बीच नंबर देगा, जो कि आप नहीं चाहते हैं। की पहली शाखा ifसही है, लेकिन यह कहने के लिए सरलीकृत किया जा सकता है return min + Math.random() * (max - min), जो सही समाधान है चाहे वह सकारात्मक हो या नकारात्मक (अन्य उत्तर देखें)। इसके अलावा, ध्यान रखें कि यदि आप अंश नहीं चाहते हैं, तब भी आपको परिणाम को मंजिल करने की आवश्यकता है।
अविष

10

मैंने और अधिक लचीले फ़ंक्शन लिखे, जो आपको यादृच्छिक संख्या दे सकते हैं, लेकिन केवल पूर्णांक नहीं।

function rand(min,max,interval)
{
    if (typeof(interval)==='undefined') interval = 1;
    var r = Math.floor(Math.random()*(max-min+interval)/interval);
    return r*interval+min;
}

var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0

निश्चित संस्करण।


यह एक अच्छा समाधान नहीं है क्योंकि यह शून्य से न्यूनतम मूल्य के रूप में काम नहीं करेगा। @ Lior का जवाब देखें।
सेबस्टियन

बेशक यह शून्य के साथ न्यूनतम मूल्य के रूप में काम करता है। क्या आप ने कोशिश की? कोई कारण नहीं है कि यह काम न करे। यह अंतराल के रूप में 0 के साथ काम नहीं करेगा जो अजीब नहीं है (अंतराल = 0? ...)।
एलचुपकाबरा

मैंने शून्य मान के साथ इस फ़ंक्शन को कई बार चलाया और आउटपुट में कभी भी शून्य प्राप्त नहीं किया। या मैं बहुत भाग्यशाली नहीं हूँ ...
सेबस्टियन

तुम सही हो। "अंतराल" गलत जगह पर था। कृपया अब इसका परीक्षण करें। अजीब बात है कि कभी-कभी दिलासा देता है। मुझे 0.3 के बजाय 0.300000004 देता है जैसे 3 * 0.1 बिल्कुल 0.3 नहीं होगा।
एलचुपकाबरा

9

उदाहरण

1 और 10 के बीच एक यादृच्छिक संख्या लौटाएँ:

Math.floor((Math.random() * 10) + 1);

परिणाम हो सकता है: 3

अपने आप को आज़माएँ: यहाँ

-

या लॉश / अंडरस्कोर का उपयोग करना:

_.random(min, max)

डॉक्स: - लॉश - अनड्रेस


1
तो आपको 9 या 10 सही चाहिए? यदि हां: const randomNumber = Math.floor ((Math.random (* 10) + 1) const नौऑरेन = randomNumber% 2 === 0? 9: 10
सेबेस्टियन लारा

7

कई उत्तर और लगभग एक ही परिणाम के बावजूद। मैं अपने उत्तर को जोड़ना चाहूंगा और इसके काम को समझाऊंगा। क्योंकि एक पंक्ति कोड को कॉपी करने के बजाय इसके काम को समझना महत्वपूर्ण है। रैंडम नंबर जेनरेट करना सरल गणित के अलावा और कुछ नहीं है।

कोड:

function getR(lower, upper) {

  var percent = (Math.random() * 100);
  // this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
  //now you have a percentage, use it find out the number between your INTERVAL :upper-lower 
  var num = ((percent * (upper - lower) / 100));
  //num will now have a number that falls in your INTERVAL simple maths
  num += lower;
  //add lower to make it fall in your INTERVAL
  //but num is still in decimal
  //use Math.floor>downward to its nearest integer you won't get upper value ever
  //use Math.ceil>upward to its nearest integer upper value is possible
  //Math.round>to its nearest integer 2.4>2 2.5>3   both lower and upper value possible
  console.log(Math.floor(num), Math.ceil(num), Math.round(num));
}

6

मैं टाइपस्क्रिप्ट में लिखे गए यादृच्छिक संख्या जनरेटर को खोज रहा था और मैंने सभी उत्तरों को पढ़ने के बाद लिखा है, आशा है कि यह टाइपस्क्रिप्ट कोडर्स के लिए काम करेगा।

    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   

5

Math.random() कई उद्देश्यों के लिए तेज़ और उपयुक्त है, लेकिन यह उचित नहीं है यदि आपको क्रिप्टोग्राफ़िक रूप से सुरक्षित मान (यह सुरक्षित नहीं है) की आवश्यकता है, या यदि आपको पूर्ण रूप से एक समान वितरण से पूर्णांक की आवश्यकता है (दूसरों के उत्तर में उपयोग किया जाने वाला गुणन दृष्टिकोण कुछ निश्चित मानों को अधिक बार पैदा करता है) दूसरों की तुलना में)।

ऐसे मामलों में, हम उपयोग कर सकते हैं crypto.getRandomValues() सुरक्षित पूर्णांक उत्पन्न करने के लिए हैं, और किसी भी उत्पन्न मान को अस्वीकार कर सकते हैं जिसे हम समान रूप से लक्ष्य सीमा में मैप नहीं कर सकते हैं। यह धीमा होगा, लेकिन यह तब तक महत्वपूर्ण नहीं होना चाहिए जब तक आप बहुत बड़ी संख्या में मान उत्पन्न नहीं कर रहे हैं।

पक्षपाती वितरण चिंता को स्पष्ट करने के लिए, उस मामले पर विचार करें जहां हम 1 और 5 के बीच एक मान उत्पन्न करना चाहते हैं, लेकिन हमारे पास एक यादृच्छिक संख्या जनरेटर है जो 1 और 16 (4-बिट मान) के बीच मान पैदा करता है। हम प्रत्येक आउटपुट मान की मैपिंग के समान संख्याएँ प्राप्त करना चाहते हैं, लेकिन 16 समान रूप से 5 से विभाजित नहीं होता है: यह शेष 1. छोड़ता है, इसलिए हमें संभावित उत्पन्न मानों में से 1 को अस्वीकार करने की आवश्यकता है, और केवल तब प्राप्त होता है जब हम प्राप्त करते हैं 15 कम मानों में से एक जो हमारे लक्ष्य सीमा में समान रूप से मैप किया जा सकता है। हमारा व्यवहार इस प्रकार का दिख सकता है:

Generate a 4-bit integer in the range 1-16.
If we generated  1,  6, or 11 then output 1.
If we generated  2,  7, or 12 then output 2.
If we generated  3,  8, or 13 then output 3.
If we generated  4,  9, or 14 then output 4.
If we generated  5, 10, or 15 then output 5.
If we generated 16 then reject it and try again.

निम्न कोड समान तर्क का उपयोग करता है, लेकिन इसके बजाय 32-बिट पूर्णांक बनाता है, क्योंकि यह सबसे बड़ा सामान्य पूर्णांक आकार है जिसे जावास्क्रिप्ट के मानक numberप्रकार द्वारा दर्शाया जा सकता है । ( BigIntयदि आपको एक बड़ी रेंज की आवश्यकता है, तो इसका उपयोग करने के लिए संशोधित किया जा सकता है ।) चुने हुए रेंज के बावजूद, अस्वीकार किए गए उत्पन्न मानों का अंश हमेशा 0.5 से कम होगा, इसलिए अस्वीकृति की अपेक्षित संख्या हमेशा 1.0 से कम होगी और आमतौर पर 0.0 के करीब; आपको इसके बारे में हमेशा चिंता करने की ज़रूरत नहीं है।

const randomInteger = (min, max) => {
  const range = max - min;
  const maxGeneratedValue = 0xFFFFFFFF;
  const possibleResultValues = range + 1;
  const possibleGeneratedValues = maxGeneratedValue + 1;
  const remainder = possibleGeneratedValues % possibleResultValues;
  const maxUnbiased = maxGeneratedValue - remainder;

  if (!Number.isInteger(min) || !Number.isInteger(max) ||
       max > Number.MAX_SAFE_INTEGER || min < Number.MIN_SAFE_INTEGER) {
    throw new Error('Arguments must be safe integers.');
  } else if (range > maxGeneratedValue) {
    throw new Error(`Range of ${range} (from ${min} to ${max}) > ${maxGeneratedValue}.`);
  } else if (max < min) {
    throw new Error(`max (${max}) must be >= min (${min}).`);
  } else if (min === max) {
    return min;
  } 

  let generated;
  do {
    generated = crypto.getRandomValues(new Uint32Array(1))[0];
  } while (generated > maxUnbiased);

  return min + (generated % possibleResultValues);
};

console.log(randomInteger(-8, 8));          // -2
console.log(randomInteger(0, 0));           // 0
console.log(randomInteger(0, 0xFFFFFFFF));  // 944450079
console.log(randomInteger(-1, 0xFFFFFFFF));
// Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(12).fill().map(n => randomInteger(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9]


अब, यह वही है जिसे मैं ओवरकिल कहता हूं।
2xSamurai

2
@ 2xSamurai वहाँ, मैंने आपको यह समझाने के लिए उत्तर दिया कि आपको इसकी आवश्यकता क्यों है और यह कैसे काम करता है। क्या वो बेहतर है? : पी
जेरेमी बैंक्स

यदि आप क्रिप्टोग्राफिक रूप से सुरक्षित और समान रूप से वितरित यादृच्छिक संख्या चाहते हैं तो यह बिल्कुल भी ओवरकिल नहीं है। उन आवश्यकताओं को पूरा करने वाले यादृच्छिक संख्या उत्पन्न करना कठिन है। शानदार जवाब, @ जेरेमीबैंक।
thomaskonrad

4

@ फ्रांसिस के उत्तर में floatसंस्करण के आधार पर निश्चित सटीक संस्करण के साथ जोड़ना int:

function randomFloatFromInterval (min, max, fractionDigits) {
  const fractionMultiplier = Math.pow(10, fractionDigits)
  return Math.round(
    (Math.random() * (max - min) + min) * fractionMultiplier,
  ) / fractionMultiplier
}

इसलिए:

randomFloatFromInterval(1,3,4) // => 2.2679, 1.509, 1.8863, 2.9741, ...

और int उत्तर के लिए

randomFloatFromInterval(1,3,0) // => 1, 2, 3

3

क्रिप्टो-मजबूत यादृच्छिक पूर्णांक संख्या रेंज में [ए, बी] (धारणा: ए <बी)

let rand= (a,b)=> a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0

console.log( rand(1,6) );


1

यह काम करना चाहिए:

const getRandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min

1

मैंने ES6 डिफ़ॉल्ट मापदंडों का उपयोग करके ऐसा करने के लिए एक शानदार नया तरीका खोजा। यह बहुत ही शून्य है क्योंकि यह या तो एक तर्क या दो तर्क देता है। यह रहा:

function random(n, b = 0) {
    return Math.random() * (b-n) + n;
}

1

यह लगभग नौ साल की देरी है, लेकिन randojs.com इसे एक सरल एक-लाइनर बनाता है:

rando(1, 6)

आपको बस इसे अपने HTML दस्तावेज़ के प्रमुख में जोड़ना होगा, और आप जो भी चाहें यादृच्छिकता के साथ आसानी से कर सकते हैं। सरणियों से यादृच्छिक मान, यादृच्छिक jquery तत्व, वस्तुओं से यादृच्छिक गुण और यहां तक ​​कि आवश्यकता होने पर पुनरावृत्ति को रोकना।

<script src="https://randojs.com/1.0.0.js"></script>

कुछ करने के लिए एक निर्भरता क्यों जोड़ें जो पहले से ही एक-लाइनर है? जेएस समुदाय में पुस्तकालयों को जोड़ने का जुनून पागल है
डैनियल कुक

पढ़ने और याद रखने में आसान। हालांकि मैं सहमत हूँ
हारून प्लोकार्स्की 15

1

यह मेरे लिए काम करता है और पायथन के random.randint मानक पुस्तकालय समारोह जैसे मूल्यों का उत्पादन करता है:


function randint(min, max) {
   return Math.round((Math.random() * Math.abs(max - min)) + min);
}

console.log("Random integer: " + randint(-5, 5));


1

मूल रूप से पासा की तरह 1-6 वापस करने के लिए,

return Math.round(Math.random() * 5 + 1);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.