# Concept of Basic JavaScript: Generate Random Whole Numbers within a RangePassed

I pass the test of the exercice but I am not entirely sure to understand what is the use of the formula

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

Can someone explain to me ?

Here is the solution explanation for this challenge, does that make sense or which part are you unsure about? It is pretty tricky how the formula gets solved.

#### Code Explanation

• `Math.random()` generates our random number between 0 and ≈ 0.9.
• Before multiplying it, it resolves the part between parenthesis `(myMax - myMin + 1)` because of the grouping operator `( )` .
• The result of that multiplication is followed by adding `myMin` and then “rounded” to the largest integer less than or equal to it (eg: 9.9 would result in 9)

If the values were `myMin = 1, myMax= 10` , one result could be the following:

1. `Math.random() = 0.8244326990411024`
2. `(myMax - myMin + 1) = 10 - 1 + 1 -> 10`
3. `a * b = 8.244326990411024`
4. `c + myMin = 9.244326990411024`
5. `Math.floor(9.244326990411024) = 9`
5 Likes

Thanks for explaining it out pjonp, but like ametthey I’m still confused about the formula.

Why is it necessary to run a `+ 1` to the min to begin with and then `+ min` again at the end of the formula?

I understand the concept of setting a min and a max, but why do we add another one to the total and then add the min again?

Tom

`max - min + 1` gives the range width
let’s say we want a number between 5 and 10: `10 - 5` is `5`, but we want one of six numbers: 5, 6, 7, 8, 9, 10 (that’s why we need `+1`)
so, `Math.random()` gives a random number between 0 and 1, then multiplied by the range and rounded gives a number between 0 and 5
so we add `min` to have a number between 5 and 10 as desired

11 Likes

Perfect, that makes sense. Thank you!

Thanks for the explanation…!!