<legend id='KdWYP'><style id='KdWYP'><dir id='KdWYP'><q id='KdWYP'></q></dir></style></legend>
        <i id='KdWYP'><tr id='KdWYP'><dt id='KdWYP'><q id='KdWYP'><span id='KdWYP'><b id='KdWYP'><form id='KdWYP'><ins id='KdWYP'></ins><ul id='KdWYP'></ul><sub id='KdWYP'></sub></form><legend id='KdWYP'></legend><bdo id='KdWYP'><pre id='KdWYP'><center id='KdWYP'></center></pre></bdo></b><th id='KdWYP'></th></span></q></dt></tr></i><div id='KdWYP'><tfoot id='KdWYP'></tfoot><dl id='KdWYP'><fieldset id='KdWYP'></fieldset></dl></div>
      1. <small id='KdWYP'></small><noframes id='KdWYP'>

      2. <tfoot id='KdWYP'></tfoot>

          <bdo id='KdWYP'></bdo><ul id='KdWYP'></ul>
      3. 在特定范围内的 JavaScript 中生成随机整数?

        时间:2023-09-07

        <small id='NkebI'></small><noframes id='NkebI'>

                <bdo id='NkebI'></bdo><ul id='NkebI'></ul>
              • <i id='NkebI'><tr id='NkebI'><dt id='NkebI'><q id='NkebI'><span id='NkebI'><b id='NkebI'><form id='NkebI'><ins id='NkebI'></ins><ul id='NkebI'></ul><sub id='NkebI'></sub></form><legend id='NkebI'></legend><bdo id='NkebI'><pre id='NkebI'><center id='NkebI'></center></pre></bdo></b><th id='NkebI'></th></span></q></dt></tr></i><div id='NkebI'><tfoot id='NkebI'></tfoot><dl id='NkebI'><fieldset id='NkebI'></fieldset></dl></div>
                <tfoot id='NkebI'></tfoot>

                    <tbody id='NkebI'></tbody>
                  <legend id='NkebI'><style id='NkebI'><dir id='NkebI'><q id='NkebI'></q></dir></style></legend>
                  本文介绍了在特定范围内的 JavaScript 中生成随机整数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  如何在 JavaScript 中的两个指定变量之间生成随机整数,例如x = 4 和 y = 8 会输出任何 4, 5, 6, 7, 8?

                  How can I generate random whole numbers between two specified variables in JavaScript, e.g. x = 4 and y = 8 would output any of 4, 5, 6, 7, 8?

                  推荐答案

                  Mozilla 开发者网络 页面:

                  /**
                   * 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;
                  }
                  

                  <小时>

                  这是它背后的逻辑.这是一个简单的三法则:


                  Here's the logic behind it. It's a simple rule of three:

                  Math.random() 返回一个介于 0(包括)和 1(不包括)之间的 Number.所以我们有一个这样的区间:

                  Math.random() returns a Number between 0 (inclusive) and 1 (exclusive). So we have an interval like this:

                  [0 .................................... 1)
                  

                  现在,我们想要一个介于 min(包括)和 max(不包括)之间的数字:

                  Now, we'd like a number between min (inclusive) and max (exclusive):

                  [0 .................................... 1)
                  [min .................................. max)
                  

                  我们可以使用 Math.random 来获取 [min, max) 区间内的对应者.但是,首先我们应该通过从第二个间隔中减去 min 来考虑问题:

                  We can use the Math.random to get the correspondent in the [min, max) interval. But, first we should factor a little bit the problem by subtracting min from the second interval:

                  [0 .................................... 1)
                  [min - min ............................ max - min)
                  

                  这给出了:

                  [0 .................................... 1)
                  [0 .................................... max - min)
                  

                  我们现在可以应用 Math.random 然后计算对应值.让我们选择一个随机数:

                  We may now apply Math.random and then calculate the correspondent. Let's choose a random number:

                                  Math.random()
                                      |
                  [0 .................................... 1)
                  [0 .................................... max - min)
                                      |
                                      x (what we need)
                  

                  所以,为了找到 x,我们会这样做:

                  So, in order to find x, we would do:

                  x = Math.random() * (max - min);
                  

                  别忘了把min加回来,这样我们就可以得到一个在[min, max)区间内的数字:

                  Don't forget to add min back, so that we get a number in the [min, max) interval:

                  x = Math.random() * (max - min) + min;
                  

                  这是 MDN 的第一个功能.第二个,返回 min 和 max 之间的整数,两者都包含.

                  That was the first function from MDN. The second one, returns an integer between min and max, both inclusive.

                  现在要获取整数,您可以使用 round、ceil 或 floor.

                  Now for getting integers, you could use round, ceil or floor.

                  您可以使用 Math.round(Math.random() * (max - min)) + min,但这会产生非均匀分布.min 和 max 都只有大约一半的滚动机会:

                  You could use Math.round(Math.random() * (max - min)) + min, this however gives a non-even distribution. Both, min and max only have approximately half the chance to roll:

                  min...min+0.5...min+1...min+1.5   ...    max-0.5....max
                  └───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘   ← Math.round()
                     min          min+1                          max
                  

                  将max排除在区间之外,滚动的机会比min还要小.

                  With max excluded from the interval, it has an even less chance to roll than min.

                  使用 Math.floor(Math.random() * (max - min +1)) + min 你有一个完全均匀的分布.

                  With Math.floor(Math.random() * (max - min +1)) + min you have a perfectly even distribution.

                  min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)
                  |        |        |         |        |        |
                  └───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘   ← Math.floor()
                     min     min+1               max-1    max
                  

                  您不能在该等式中使用 ceil() 和 -1 因为 max 现在滚动的机会略少,但是您也可以滚动(不需要的)min-1 结果.

                  You can't use ceil() and -1 in that equation because max now had a slightly less chance to roll, but you can roll the (unwanted) min-1 result too.

                  这篇关于在特定范围内的 JavaScript 中生成随机整数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:JSON.Stringify 在 Scripting.Dictionary 对象上失败 下一篇:如何解决 JavaScript 的 parseInt 八进制行为?

                  相关文章

                  最新文章

                • <small id='DZjvb'></small><noframes id='DZjvb'>

                    <bdo id='DZjvb'></bdo><ul id='DZjvb'></ul>

                  1. <legend id='DZjvb'><style id='DZjvb'><dir id='DZjvb'><q id='DZjvb'></q></dir></style></legend>

                    1. <tfoot id='DZjvb'></tfoot>
                    2. <i id='DZjvb'><tr id='DZjvb'><dt id='DZjvb'><q id='DZjvb'><span id='DZjvb'><b id='DZjvb'><form id='DZjvb'><ins id='DZjvb'></ins><ul id='DZjvb'></ul><sub id='DZjvb'></sub></form><legend id='DZjvb'></legend><bdo id='DZjvb'><pre id='DZjvb'><center id='DZjvb'></center></pre></bdo></b><th id='DZjvb'></th></span></q></dt></tr></i><div id='DZjvb'><tfoot id='DZjvb'></tfoot><dl id='DZjvb'><fieldset id='DZjvb'></fieldset></dl></div>