DEV Community

Sh Raj
Sh Raj

Posted on โ€ข Edited on โ€ข Originally published at codexdindia.blogspot.com

4 3

Generating Random Whole numbers in JavaScript in a specific range

Video Documentation :- https://youtu.be/xz3VbIaEG8o

Mozilla Developer Network page on this JavaScript Math Object: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive).
 * The value is no lower than min (or the next integer greater than min
 * if min isn't an integer) and no greater than max (or the next integer
 * lower than max if max isn't an integer).
 * Using Math.round() will give you a non-uniform distribution!
 */
function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
Enter fullscreen mode Exit fullscreen mode

Credit & Logic Behind it :- https://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-in-a-specific-range

At Last here is the concluded function

function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
Enter fullscreen mode Exit fullscreen mode

And the minified form of the function

const getRandomInt = (min, max)=>~~(Math.random()*(max-min+1)+min)
Enter fullscreen mode Exit fullscreen mode

Tutorials :- https://tutorials.sh20raj.repl.co/js/generating-random-whole-numbers-in-javascript-in-a-specific-range-jeo/

Checkout Instagram :-


Top comments (15)

Collapse
 
jonrandy profile image
Jon Randy ๐ŸŽ–๏ธ โ€ข

About 40% faster:

const getRandomInt = (min, max)=>~~(Math.random()*(max-min+1)+min)
Enter fullscreen mode Exit fullscreen mode
Collapse
 
darkwiiplayer profile image
๐’ŽWii ๐Ÿณ๏ธโ€โšง๏ธ โ€ข

It's faster because it doesn't work; at least not for numbers bigger than what fits in a 32-bit integer ;)

Collapse
 
jonrandy profile image
Jon Randy ๐ŸŽ–๏ธ โ€ข

Poorly written spec ;)

Thread Thread
 
darkwiiplayer profile image
๐’ŽWii ๐Ÿณ๏ธโ€โšง๏ธ โ€ข

The spec is wrong ๐Ÿ˜

Collapse
 
sh20raj profile image
Sh Raj โ€ข

Can You Minify this Function also...

function getParameterByName( name ){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
darkwiiplayer profile image
๐’ŽWii ๐Ÿณ๏ธโ€โšง๏ธ โ€ข โ€ข Edited

No need, your browser already minified it for you and put it in a class called URLSearchParams ๐Ÿ˜

Thread Thread
 
sh20raj profile image
Sh Raj โ€ข

Ya bro it helped ๐Ÿ’–

Collapse
 
neoprint3d profile image
Drew Ronsman โ€ข

Never seen that way I will have to try and use it

Collapse
 
willaiem profile image
Damian ลปygadล‚o โ€ข

This is soooo confusing. I have like zero idea, why this works, espencially the "~" operator.

When I do ~(-1), I got 0, but if I do ~~(-1), I got -1. emm.... what?

Collapse
 
codingjlu profile image
codingjlu โ€ข

>> and | also work in flooring a number, but in negative values it rounds "down".

Thread Thread
 
jonrandy profile image
Jon Randy ๐ŸŽ–๏ธ โ€ข

It isn't flooring in these cases - merely removing the decimal part.

Thread Thread
 
codingjlu profile image
codingjlu โ€ข

Oh, I forgot to mentionโ€”it behaves just like Math.floor unless the value is negative.

Collapse
 
jonrandy profile image
Jon Randy ๐ŸŽ–๏ธ โ€ข โ€ข Edited

~ is the bitwise NOT operator, which will reverse all bits in the number - having converted it to a 32-bit signed integer first. Applying it twice resets the bits to their original state. It's a dirty trick to convert to an integer

w3schools.com/js/js_bitwise.asp

Collapse
 
sh20raj profile image
Sh Raj โ€ข

Thanks bro... ๐Ÿ‘๐Ÿ‘
I will add this code to this Article ๐Ÿ‘๐Ÿ‘

Collapse
 
codingjlu profile image
codingjlu โ€ข

The "minified" form doesn't behave the same. In negative numbers, the first function is inclusive, while the second one is exclusive.

Run both about 30 times to see what I mean, and pass the values -10, -1.

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay