我使用Math.random()
函数生成了W3School示例中建议的数字:
Math.floor((Math.random() * 10) + 1);
示例说明说'它'返回1到10之间的随机数“
我稍微修改它以获得2到17之间的范围:
Math.floor((Math.random() * 17) + 2);
然而,当我使用控制台测试它时,我得到了值18。
为什么我的代码返回的值超出预期范围?
答案 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(含)的数字。