Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
JavaScript: get a random number from a specific range
/**
* Get a random floating point number between `min` and `max`.
*
* @param {number} min - min number
* @param {number} max - max number
* @return {number} a random floating point number
*/
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
/**
* Get a random integer between `min` and `max`.
*
* @param {number} min - min number
* @param {number} max - max number
* @return {number} a random integer
*/
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
/**
* Get a random boolean value.
*
* @return {boolean} a random true/false
*/
function getRandomBool() {
return Math.random() >= 0.5;
}
@neurotech

This comment has been minimized.

Show comment
Hide comment
@neurotech

neurotech Jun 1, 2015

Thanks for this - it came in useful and helped me solve a problem today. 😀

Thanks for this - it came in useful and helped me solve a problem today. 😀

@kerimdzhanov

This comment has been minimized.

Show comment
Hide comment
@kerimdzhanov

kerimdzhanov Jun 2, 2015

Always welcome! Glad to know that it's helpful. :)

Owner

kerimdzhanov commented Jun 2, 2015

Always welcome! Glad to know that it's helpful. :)

@alvarod-infocorp

This comment has been minimized.

Show comment
Hide comment
@alvarod-infocorp

alvarod-infocorp Dec 23, 2015

Thanks, it's just I need

Thanks, it's just I need

@Verten

This comment has been minimized.

Show comment
Hide comment

Verten commented Jan 28, 2016

Thanks!

@cjseeger

This comment has been minimized.

Show comment
Hide comment
@cjseeger

cjseeger Feb 11, 2016

Very Helpful

Very Helpful

@PrincessRTFM

This comment has been minimized.

Show comment
Hide comment
@PrincessRTFM

PrincessRTFM Mar 4, 2016

Is the range inclusive on both ends? If I call getRandomInt(1, 5) are 1 and 5 BOTH possible returns?

Is the range inclusive on both ends? If I call getRandomInt(1, 5) are 1 and 5 BOTH possible returns?

@AndrePessoa

This comment has been minimized.

Show comment
Hide comment
@AndrePessoa

AndrePessoa Mar 11, 2016

@kerimdzhanov, but if the random be 1, this will not be wrong... = (

getRandomInt( 1,5 );
Math.floor(Math.random() * ( 5 - 1 + 1) + 1);
Math.floor(Math.random() * ( 5 ) + 1);
Math.floor( 1 * ( 5 ) + 1);
6;

My suggestion is limit the max. What do you think?

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

@kerimdzhanov, but if the random be 1, this will not be wrong... = (

getRandomInt( 1,5 );
Math.floor(Math.random() * ( 5 - 1 + 1) + 1);
Math.floor(Math.random() * ( 5 ) + 1);
Math.floor( 1 * ( 5 ) + 1);
6;

My suggestion is limit the max. What do you think?

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

@gonejack

This comment has been minimized.

Show comment
Hide comment
@gonejack

gonejack Mar 17, 2016

return (Math.random() * (max - min + 1) + min) | 0; would be faster if you are sensitive with code performance.

but now, in new chrome, there are no difference.

return (Math.random() * (max - min + 1) + min) | 0; would be faster if you are sensitive with code performance.

but now, in new chrome, there are no difference.

@fernandocanizo

This comment has been minimized.

Show comment
Hide comment
@fernandocanizo

fernandocanizo Apr 29, 2016

@AndrePessoa
Math.random() never gives 1, so there's no need to use Math.min() or @gonejack solution.

@AndrePessoa
Math.random() never gives 1, so there's no need to use Math.min() or @gonejack solution.

@hackyourcraft

This comment has been minimized.

Show comment
Hide comment
@hackyourcraft

hackyourcraft Jun 7, 2016

What I cannot seem to compute in my head is the "+min" at the end. I understand (max - min + 1) for inclusivity of the full range, but am at a lost to why you need the +min. What am I not getting?

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

What I cannot seem to compute in my head is the "+min" at the end. I understand (max - min + 1) for inclusivity of the full range, but am at a lost to why you need the +min. What am I not getting?

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

@nullicorn

This comment has been minimized.

Show comment
Hide comment
@nullicorn

nullicorn Jun 23, 2016

@hackyourcraft without "+min" the range would start at 0.

@hackyourcraft without "+min" the range would start at 0.

@blixten26

This comment has been minimized.

Show comment
Hide comment
@blixten26

blixten26 Feb 18, 2017

Thanks soo much!

Thanks soo much!

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Apr 11, 2017

You are best :)

ghost commented Apr 11, 2017

You are best :)

@nigeltiany

This comment has been minimized.

Show comment
Hide comment
@nigeltiany

nigeltiany May 31, 2017

When the parameter is only one. The "min" becomes the max and "min" is 0

random(min, max) {
    return (Math.random() * ((max ? max : min) - (max ? min : 0) + 1) + (max ? min : 0)) | 0;
}

When the parameter is only one. The "min" becomes the max and "min" is 0

random(min, max) {
    return (Math.random() * ((max ? max : min) - (max ? min : 0) + 1) + (max ? min : 0)) | 0;
}
@tryllid

This comment has been minimized.

Show comment
Hide comment
@tryllid

tryllid Aug 31, 2017

Thank you!

tryllid commented Aug 31, 2017

Thank you!

@Manjuanjanadri

This comment has been minimized.

Show comment
Hide comment
@Manjuanjanadri

Manjuanjanadri Oct 12, 2017

I need to generate random numbers using javascript could you plz review?

I need to generate random numbers using javascript could you plz review?

@tejashah88

This comment has been minimized.

Show comment
Hide comment
@tejashah88

tejashah88 Jan 30, 2018

Here are the same functions using ES6 syntax:

/**
 * Get a random floating point number between `min` and `max`.
 * 
 * @param {number} min - min number
 * @param {number} max - max number
 * @return {number} a random floating point number
 */
let randomFloat = (min, max) => Math.random() * (max - min) + min;

/**
 * Get a random integer between `min` and `max`.
 * 
 * @param {number} min - min number
 * @param {number} max - max number
 * @return {number} a random integer
 */
let randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);

/**
 * Get a random boolean value.
 * 
 * @return {boolean} a random true/false
 */
let randomBool = () => Math.random() >= 0.5;

Here are the same functions using ES6 syntax:

/**
 * Get a random floating point number between `min` and `max`.
 * 
 * @param {number} min - min number
 * @param {number} max - max number
 * @return {number} a random floating point number
 */
let randomFloat = (min, max) => Math.random() * (max - min) + min;

/**
 * Get a random integer between `min` and `max`.
 * 
 * @param {number} min - min number
 * @param {number} max - max number
 * @return {number} a random integer
 */
let randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);

/**
 * Get a random boolean value.
 * 
 * @return {boolean} a random true/false
 */
let randomBool = () => Math.random() >= 0.5;
@msoliman85

This comment has been minimized.

Show comment
Hide comment
@msoliman85

msoliman85 Apr 27, 2018

this might be late, but hopefully it helps someone else in the future.

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

between 4,6
Math.floor(Math.random() * 6) + 4;

this might be late, but hopefully it helps someone else in the future.

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

between 4,6
Math.floor(Math.random() * 6) + 4;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment