We can use a certain mathematical expression to get a random number between two numbers.

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

**See Also:** **Explanation** | Explanation in SO

## Explanation

`Math.random()`

creates a floating point number between`0`

(inclusive) and`1`

(exclusive)

**Q:** Create a random **whole** number between `2`

(inclusive, min) and `6`

(inclusive, max) i.e. create a random *whole* number between `min`

(*inclusive*) and `max`

(*inclusive*)

**A:** `Math.floor(Math.random() * (6 - 2 + 1)) + 2`

Letâ€™s write `Math.random() * max`

which creates a floating point number between `0`

(inclusive) and `max`

(*exclusive*).

E.g. `Math.random() * 6`

generates a random floating point number between `0`

(inclusive) and `6`

(*exclusive*).

But we need to generate a whole number between `0`

(*inclusive*) and `max`

(*inclusive*) first. So we do a trick .

What if we create a number between `0`

and `max + 1`

. That way, we also include the `max`

number. And then apply the `Math.floor`

method on the result to get a whole number between ** 0** (

*inclusive*, min) and

`max`

(*inclusive*).

We can write it as `Math.floor(Math.random() * (max + 1))`

.

E.g. `Math.floor(Math.random() * (6 + 1))`

generates a random whole number between ** 0** (

*inclusive*, min) and

**(**

`6`

*inclusive*, max).

`0 1 2 3 4 5 6`

The

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

part generates a floating point number between`0`

(inclusive) and`7`

(exclusive).

`0..1..2..3..4..5..6..`

But that doesnâ€™t solve our given question yet . We need to generate a random whole number between ** min** (

*inclusive*) and

**(**

`max`

*inclusive*). So we need another trick .

What if we write `Math.floor(Math.random() * ((max + 1) - min))`

that will generate a whole number between `0`

and `(max + 1) - min`

.

E.g. `Math.floor(Math.random() * ((6 + 1) - 2))`

**=** `Math.floor(Math.random() * 5)`

that will generate a whole number between `0`

(inclusive) and `4`

(inclusive).

`0 1 2 3 4`

But still the question is unsolved . We need the random number between `min`

(**inclusive**) and `max`

(**inclusive**).

So we simply write `Math.floor(Math.random() * ((max + 1) - min)) + min`

.

E.g. `Math.floor(Math.random() * ((6 + 1) - 2)) + 2`

**=** `Math.floor(Math.random() * 5) + 2`

`2 3 4 5 6`

**Now this answers our given question. Math.floor(Math.random() * (max - min + 1) + min correctly generates a random number between min (**

*inclusive*) and max (

*inclusive*) i.e. it generates a random whole number between 2 (inclusive) and 6 (inclusive).