Generate random number between two numbers in JavaScript

Generate random number between two numbers in JavaScript

Is there a way to generate a random number in a specified range (e.g. from 1 to 6: 1, 2, 3, 4, 5, or 6) in JavaScript?

Solutions/Answers:

Solution 1:

Important

The following code works only if the minimum value is 1. It does not work for minimum values other than 1.

If you wanted to get a random integer between 1 (and only 1) and 6, you would calculate:

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

Where:

  • 1 is the start number
  • 6 is the number of possible results (1 + start (6) – end (1))

Solution 2:

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

What it does “extra” is it allows random intervals that do not start with 1.
So you can get a random number from 10 to 15 for example. Flexibility.

Solution 3:

Math.random()

From the Mozilla Developer Network documentation:

// Returns a random integer between min (include) and max (include)

Math.floor(Math.random() * (max - min + 1)) + min;

Useful examples:

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

Solution 4:

Other solutions:

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

Solution 5:

TL;DR

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

To get the random number
generateRandomInteger(-20, 20);

EXPLANATION BELOW

We need to get a random integer, say X between min and max.

Right?

i.e
min <= X <= max

If we subtract min from the equation, this is equivalent to

0 <= (X – min) <= (max – min)

Now, lets multiply this with a random number r
which is

0 <= (X – min) * r <= (max – min) * r

Now, lets add back min to the equation

min <= min + (X – min) * r <= min + (max – min) * r

Now, lets chose a function which results in r such that it satisfies our equation range as [min,max]. This is only possible if 0<= r <=1

OK. Now, the range of r i.e [0,1] is very similar to Math.random() function result. Isn’t it?

The Math.random() function returns a floating-point, pseudo-random
number in the range [0, 1); that is, from 0 (inclusive) up to but not
including 1 (exclusive)

For example,

Case r = 0

min + 0 * (maxmin) = min

Case r = 1

min + 1 * (maxmin) = max

Random Case using Math.random 0 <= r < 1

min + r * (maxmin) = X, where X has range of min <= X < max

The above result X is a random numeric. However due to Math.random() our left bound is inclusive, and the right bound is exclusive. To include our right bound we increase the right bound by 1 and floor the result.

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

To get the random number

generateRandomInteger(-20, 20);

Solution 6:

Or, in Underscore

_.random(min, max)