javascript随机溢出或超出范围

时间:2016-02-24 15:35:11

标签: javascript

我使用Math.random()函数生成了W3School示例中建议的数字:

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

示例说明说'它'返回1到10之间的随机数“

我稍微修改它以获得2到17之间的范围:

Math.floor((Math.random() * 17) + 2);

然而,当我使用控制台测试它时,我得到了值18。

为什么我的代码返回的值超出预期范围?

4 个答案:

答案 0 :(得分:8)

Math.random()返回值[0,1)(不包括上限!)。如果将其乘以17,则得到0到17之间的值([0,17))。加2,你的范围在2到19之间([2,19]),所以18就在这个范围内。

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

返回[1,10]的范围,因为如果您将[0,1]乘以10,则得到[0,10),加1,得到[1,11],并且得到[1,10] 10。

答案 1 :(得分:4)

试试这个:

//exclude max
function getRandomArbitrary(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

//include max
function getRandomArbitrary(min, max) {
  return Math.floor(Math.random() * (max - min +1)) + min;
}

来源:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random

答案 2 :(得分:1)

您在Math.floor(Math.random()* 17)的结果中添加2。因此,例如,如果你有一个16的覆盖结果(.999 * 17),则会添加2,结果为18。

答案 3 :(得分:1)

math.random()函数返回[0,1>之间的值;即:小于1.0000000的值。如果将此乘以10然后再加1(来自W3Schools),您将获得1到10(含)的数字。 你乘以17然后加2,所以你得到一个2到18(含)的数字。