Generate random number between two numbers in JavaScript

后端 未结 23 2089
走了就别回头了
走了就别回头了 2020-11-22 01:09

Is there a way to generate a random number in a specified range (e.g. from 1 to 6: 1, 2, 3, 4, 5, or 6) in JavaScript?

23条回答
  •  無奈伤痛
    2020-11-22 01:43

    TL;DR

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

    To get the random number generateRandomInteger(-20, 20);

    EXPLANATION BELOW

    We need to get a random integer, say X between min and max.

    Right?

    i.e min <= X <= max

    If we subtract min from the equation, this is equivalent to

    0 <= (X - min) <= (max - min)

    Now, lets multiply this with a random number r which is

    0 <= (X - min) * r <= (max - min) * r

    Now, lets add back min to the equation

    min <= min + (X - min) * r <= min + (max - min) * r

    Now, lets chose a function which results in r such that it satisfies our equation range as [min,max]. This is only possible if 0<= r <=1

    OK. Now, the range of r i.e [0,1] is very similar to Math.random() function result. Isn't it?

    The Math.random() function returns a floating-point, pseudo-random number in the range [0, 1); that is, from 0 (inclusive) up to but not including 1 (exclusive)

    For example,

    Case r = 0

    min + 0 * (max-min) = min

    Case r = 1

    min + 1 * (max-min) = max

    Random Case using Math.random 0 <= r < 1

    min + r * (max-min) = X, where X has range of min <= X < max

    The above result X is a random numeric. However due to Math.random() our left bound is inclusive, and the right bound is exclusive. To include our right bound we increase the right bound by 1 and floor the result.

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

    To get the random number

    generateRandomInteger(-20, 20);

提交回复
热议问题