Javascript: Math.random

10
如果num参数为52,有多少个可能的返回值?是52还是53?如果我理解正确,Math.random使用从0到1(含)的随机值。如果是这样,那么0是可能的返回值,52也是。这将导致53个可能的返回值。这正确吗?我提问的原因是我正在学习一本书中的卡牌程序,我想知道num是否应该等于51?谢谢...
function getRandom(num) {
    var my_num = Math.floor(Math.random * num);
    return my_num;
};

它是从零到一,包括零但不包括一。 - Pointy
感谢下面所有的回复。Pointy和其他人都指出了这一点。1不是包含在内的(这是我的误解,我以为0和1都包含在内),因此所有的返回值都是0到51,总共有52个返回值... - nanonerd
3个回答

13
Math.floor(Math.random() * num) // note random() is a function.

这将返回从0(包括0)到num(不包括num)的所有整数。

Math.random 返回一个介于0(包括0)和1(不包括1)之间的数字。将结果乘以X可以得到介于0(包括0)和X(不包括X)之间的数字。添加或减去X可以将范围平移+-X。

以下是一些很有用的函数,来自MDN

// Returns a random number between 0 (inclusive) and 1 (exclusive)
function getRandom() {
  return Math.random();
}

// Returns a random number between min and max
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

// Returns a random integer between min and max
// Using Math.round() will give you a non-uniform distribution!
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

3

由于 Math.random 返回一个在区间 [0,1) 内的实数(1 不包括在内),将其乘以 52 后得到的是一个在区间 [0, 52) 内的实数。

由于你对结果进行了向下取整,最大返回值为 51,共有 52 个不同的值(包括 0 在内)。


他在那里调用了 Math.floor() ... 而且他实际上并没有 调用 Math.random - Pointy
@Pointy:没错,我刚注意到了。我猜不调用函数只是个笔误,因为他说他从一本书上得到了这段代码。或者错误在书中,这更令人担忧。 - Felix Kling

2

由于 Math.random 的值从 0 到 1(不包括 1)变化; 因此,如果您在 getRandom 中传递 52,则返回值将从 0 到 52(不包括 52)变化。因此,getRandom 只能返回 52 个值。由于使用了 Math.floor,可以返回的最大值为 51。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接