首页 文章

在JavaScript中生成两个数字之间的随机数

提问于
浏览
1365

有没有办法在JavaScript中生成指定范围内的随机数(例如1到6:1,2,3,4,5或6)?

18 回答

  • 4

    或者,在Underscore

    _.random(min, max)
    
  • 4

    我发现上面的Francisc的解决方案不包括结果中的最小或最大数字,所以我改变了它:

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

    如果你想得到1到6之间,你会计算:

    Math.floor(Math.random() * 6) + 1
    

    哪里:

    • 1是起始编号

    • 6是可能结果的数量(1开始(6) - 结束(1))

  • 18

    我写了更灵活的函数,可以给你随机数,但不仅仅是整数 .

    function rand(min,max,interval)
    {
        if (typeof(interval)==='undefined') interval = 1;
        var r = Math.floor(Math.random()*(max-min+interval)/interval);
        return r*interval+min;
    }
    
    var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
    var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0
    

    修正版 .

  • 1679
    function random(min, max){
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
  • -1
    function randomIntFromInterval(min,max) // min and max included
    {
        return Math.floor(Math.random()*(max-min+1)+min);
    }
    

    它所做的“额外”是允许随机间隔不以1开头 . 因此,您可以获得10到15之间的随机数 . 灵活性 .

  • 13

    您可以使用 crypto.getRandomValues() 生成均匀分布的加密安全随机数,而不是 Math.random() . 这是一个例子:

    function randInt(min, max) {
      var MAX_UINT32 = 0xFFFFFFFF;
      var range = max - min;
    
      if (!(range <= MAX_UINT32)) {
        throw new Error(
          "Range of " + range + " covering " + min + " to " + max + " is > " +
          MAX_UINT32 + ".");
      } else if (min === max) {
        return min;
      } else if (!(max > min)) {
        throw new Error("max (" + max + ") must be >= min (" + min + ").");
      }
    
      // We need to cut off values greater than this to avoid bias in distribution
      // over the range.
      var maxUnbiased = MAX_UINT32 - ((MAX_UINT32 + 1) % (range + 1));
    
      var rand;
      do {
        rand = crypto.getRandomValues(new Uint32Array(1))[0];
      } while (rand > maxUnbiased);
    
      var offset = rand % (range + 1);
      return min + offset;
    }
    
    console.log(randInt(-8, 8));          // -2
    console.log(randInt(0, 0));           // 0
    console.log(randInt(0, 0xFFFFFFFF));  // 944450079
    console.log(randInt(-1, 0xFFFFFFFF));
    // Uncaught Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
    console.log(new Array(24).fill().map(n => randInt(8, 12)));
    // [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9,
    //  11, 8, 11, 8, 8, 8, 11, 9, 10, 12, 9, 11]
    console.log(randInt(10, 8));
    // Uncaught Error: max (8) must be >= min (10).
    
  • 17

    jsfiddle:https://jsfiddle.net/cyGwf/477/

    Random Integer :要获取 minmax 之间的随机整数,请使用以下代码

    function getRandomInteger(min, max) {
      min = Math.ceil(min);
      max = Math.floor(max);
      return Math.floor(Math.random() * (max - min)) + min;
    }
    

    Random Floating Point Number :要获取 minmax 之间的随机浮点数,请使用以下代码

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

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random

  • 7

    其他方案:

    • (Math.random() * 6 | 0) + 1

    • ~~(Math.random() * 6) + 1

  • 215

    TL;DR

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

    得到随机数 generateRandomInteger(-20, 20);

    EXPLANATION BELOW

    我们需要得到一个随机整数,比如说min和max之间的 X .

    对?

    min <= X <= max

    如果我们从等式中减去min,这相当于

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

    现在,让我们将其与随机数 r 相乘

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

    现在,让我们将 min 添加回等式

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

    现在,让我们选择一个导致 r 的函数,使其满足我们的等式范围[min,max] . 这只有 0<= r <=1 才有可能

    好 . 现在, r 的范围,即[0,1]与Math.random()函数结果非常相似 . 不是吗?

    Math.random()函数返回[0,1]范围内的浮点伪随机数;也就是说,从0(含)到最高但不包括1(不包括)

    例如,

    案例r = 0

    min 0 *( max - min )= min

    案例r = 1

    min 1 *( max - min )= max

    使用Math.random的随机情况0 <= r <1

    min r *( max - min )= X ,其中 X 的范围为 min <= X < max

    以上结果 X 是随机数字 . 但是由于Math.random(),我们的左边界是包容性的,右边界是独占的 . 要包含我们的右边界,我们将右边界增加1并将结果置于底层 .

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

    获取随机数

    generateRandomInteger(-20, 20) ;

  • 79

    感觉你需要在最大数字上加1,然后减去任何这个的最小数量,我需要做很多随机整数,这个函数有效 .

    var random = function(max, min) {
        high++;
        return Math.floor((Math.random()) * (max - min)) + min;
    };
    

    这适用于负数和正数,我正在处理库的小数 .

  • 35
    var x = 6; // can be any number
    var rand = Math.floor(Math.random()*x) + 1;
    
  • -3

    Math.random()

    Mozilla Developer Network文档:

    // Returns a random integer between min (include) and max (include)
    
    Math.floor(Math.random() * (max - min + 1)) + min;
    

    有用的例子:

    // 0 -> 10
    Math.floor(Math.random() * 11);
    
    // 1 -> 10
    Math.floor(Math.random() * 10) + 1;
    
    // 5 -> 20
    Math.floor(Math.random() * 16) + 5;
    
    // -10 -> (-2)
    Math.floor(Math.random() * 9) - 10;
    
  • 8

    尽管有很多答案和几乎相同的结果 . 我想补充一下我的答案并解释它的工作原理 . 因为理解它的工作而不是复制粘贴一行代码很重要 . 生成随机数只不过是简单的数学 .

    码:

    function getR(lower, upper) {
    
      var percent = (Math.random() * 100);
      // this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
      //now you have a percentage, use it find out the number between your INTERVAL :upper-lower 
      var num = ((percent * (upper - lower) / 100));
      //num will now have a number that falls in your INTERVAL simple maths
      num += lower;
      //add lower to make it fall in your INTERVAL
      //but num is still in decimal
      //use Math.floor>downward to its nearest integer you won't get upper value ever
      //use Math.ceil>upward to its nearest integer upper value is possible
      //Math.round>to its nearest integer 2.4>2 2.5>3   both lower and upper value possible
      console.log(Math.floor(num), Math.ceil(num), Math.round(num));
    }
    
  • 2

    我正在搜索用TypeScript编写的随机数生成器,我在阅读完所有答案之后编写了这个,希望它适用于TypeScript编码器 .

    Rand(min: number, max: number): number {
            return (Math.random() * (max - min + 1) | 0) + min;
        }
    
  • 17

    数学不是我的强项,但我一直致力于一个项目,我需要在正面和负面之间产生大量的随机数 .

    function randomBetween(min, max) {
        if (min < 0) {
            return min + Math.random() * (Math.abs(min)+max);
        }else {
            return min + Math.random() * max;
        }
    }
    

    例如

    randomBetween(-10,15)//or..
    randomBetween(10,20)//or...
    randomBetween(-200,-100)
    

    当然,您还可以添加一些验证,以确保不使用除数字之外的任何其他内容 . 还要确保min始终小于或等于max .

  • 1766

    为了在javascript中创建一个随机数,我们可以使用内置的javascript Math 对象 . Math 对象包含函数 Math.random() . 此函数执行以下操作(源MDN):

    Math.random()函数返回0-1范围内的浮点伪随机数(包括0,但不包括1),在该范围内具有近似均匀的分布 - 然后可以缩放到所需范围 .

    有了这个功能,我们可以轻松地将其扩展到更复杂的场景 . 例如:

    function randomNR (x, y){
    return Math.round((Math.random() * x + y));
    }
    
    // dice >> random number between 1-6
    // dice functionality without function >> Math.round((Math.random() * 5 + 1))
    console.log(randomNR(5,1));
    
    
    // coin >> random number between 0-1
    // coin functionality without function >> Math.round((Math.random() * 1))
    console.log(randomNR(1,0))
    
  • 0

    返回1到10之间的随机数:

    Math.floor((Math.random() * 10) + 1);
    

    结果可能是: 3

    试试自己:here

    或使用lodash / unexcore:

    _.random(min, max)

    文件: - lodash - undescore

相关问题