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
3 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

3 Likes

Perfect, that makes sense. Thank you!

Thanks for the explanation…!!