Shortest code for random number between 1 and N in JavaScript
Here I want to show you a tip for creating a random number between 1 and N in easiest and shortest way.
Code
Here is the code:
~~(Math.random() * N) + 1
All you need to do is to replace N with your upper number.
How?
In JavaScript we have Math.random()
which creates a random number between 0 and 1, e.g. 0.3577353348955512. We use this function to have a random number, then we multiply that to our upper number (e.g. 6):
0.3577353348955512 * 6 = 2.1464120093733072
And then we get the floor number with double ~
operator (see this tip: https://coderwall.com/p/9b6ksa).
Written by Afshin Mehrabani
Related protips
6 Responses
And for the same with -ve random numbers: ~(Math.random() * N)

+1 for the ~~
operator, I didn't actually know that you can floor numbers like that, thanks for sharing

Please, forgive my dumb question. What is the point of the +1
?
If Math.random()
returns a random number between 0 and 1, in case of 1:
1 * 6 + 1
This returns 7.

Math.random()
return a random number between 0 (inclusive) and 1 (exclusive).

Thanks, @as32!

Math.floor is faster in new version of v8 ;)