The Math.random()
method is one of JavaScript’s Math object method that returns a positive random number that’s lower than 1, meaning it can generate a random number between 0
and 0.99999999999999999
console.log(Math.random());
// 0.35574907184159277
console.log(Math.random());
// 0.7612336564594773
console.log(Math.random());
// 0.669688248313085
console.log(Math.random());
// 0.8246898327750964
This method doesn’t receive any parameters.
Generating integer numbers within a range
This number returned by this method can be used as the spark to generate a random number between a specified range of your choosing. For example, let’s say you want to generate a random number between 50
to 60
. Here’s how you do it:
const randomNum = Math.random();
const randomBetween = randomNum * (6 - 50) + 50;
The math formula is as follows:
randomNum * (max - min) + min
However, since the random number generator can only generate numbers lower than 1, this means you will only receive numbers between 50
and 59.99...
to include the maximum number into the random generator, you need to add a + 1
into the formula:
randomNum * (max - min + 1) + min
But we’re not done yet here! The formula above will return a number between 50
and 60.99...
0.999 * (60 - 50 + 1) + 50 = 60.98900
The random number will never return 61
, so all you need to do is to round the number down with the Math.floor()
method:
Math.floor(0.999 * (60 - 50 + 1) + 50);
// returns 60
The complete formula is as follows:
const randomNum = Math.random();
const min = 50;
const max = 60;
const randomBetween = randomNum * (max - min + 1) + min;
const randomInteger = Math.floor(randomBetween);
Now you can generate a random number between 50
to 60
, although you can’t generate a decimal number this way.
Generating decimal numbers within a range
If you want your random generator to also allows decimal numbers, you need to replace the generated number with max
only when the randomBetween
value is higher than max
:
const randomNum = Math.random();
const min = 50;
const max = 60;
let randomBetween = randomNum * (max - min + 1) + min;
if (randomBetween > max) {
randomBetween = max;
}
Now you can have decimal numbers between the specified range.