【问题标题】:JavaScript - random multiple of 20 between 0 - 580JavaScript - 0 - 580 之间 20 的随机倍数
【发布时间】:2012-10-04 09:07:52
【问题描述】:

在 Javascript 中,如何在 0 - 580 之间创建一个随机偶数乘以 20?

例如:220、360、180、0(最小)、400、200、580(最大)

【问题讨论】:

标签: javascript random


【解决方案1】:

您需要 20 的增量,所以您真正需要的是 0 到 29 范围内的整数,然后乘以 20。示例:

var max = (580/20) + 1;
var result = 20 * (Math.floor(Math.random())*max)

我们在max 上加一,因为 Math.random() 是一个均匀分布在(包括 0)和(不包括 1)之间的数,所以由于我们使用的是 Math.floor,所以最大值必须大 1。

【讨论】:

  • 谢谢。感谢您的帮助!
【解决方案2】:

这种方式创建一个随机数,然后将其向下舍入到最接近的倍数:

当你需要 0

var random = Math.random() * (580 + 20);
randomMultiple = random - (random % 20);

当你需要 0

var random = Math.random() * 580;
randomMultiple = random - (random % 20);

【讨论】:

  • 天哪!这条路太美了,我永远找不到它:-(
【解决方案3】:

使用这样的原则:Generate random number between two numbers in JavaScript

请记住,如果您希望最大结果为 580,那么您希望乘以 20 的最大整数将为 29(或 580/20)。然后只需添加一些逻辑以确保整数是偶数。

哒哒!

【讨论】:

    【解决方案4】:

    试试这个:

    var result = parseInt(Math.random()*30)*20;
    

    29*20 = 580

    Math.random() 返回 [0..1)

    结果在 0..580 之间,步长 20

    【讨论】:

      【解决方案5】:

      这是一个通用的 javascript one-liner,可用于任何范围和任何倍数。

      本质上,我们在这里要做的是找出一个范围,从 0 到 N,当乘以我们给定的 multiple 时,它会保持在 [0, 最大-最小]。

      在这种情况下,N 就是 (max - min)/multiple,或 range/multiple

      一旦我们有了 N,我们就可以使用 Math.random() 来获得一个介于 0-N 之间的随机数,并将其与倍数相乘。接下来,我们只需添加 min

      我们假设 minmax 已经是 multiple 的倍数。

      注意 Math.random() 输入的额外 +1 是因为 Math.random() 返回一个介于 0(包括)和 1(不包括)之间的数字。因此,Math.random() 永远不会返回 1。如果我们不考虑这一点,我们将永远无法在结果中包含最大数。

      /*
       * Returns a random number within range [min,max]
       *
       * min and max must be multiples of multiple
       * (note that 0 is a multiple of all integers)
       */
      function randomMultiple (min, max, multiple) {
          return Math.floor(Math.random() * (((max - min)/multiple)+1)) * multiple + min;
      }
      
      console.log(randomMultiple(0, 580, 20));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 2014-04-11
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多