9

如果 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;
};
4

3 回答 3

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

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

Math.random返回一个介于 0(包括)和 1(不包括)之间的数字。将结果乘以 X 会得到 0(包括)和 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;
}
于 2012-10-14T18:27:15.057 回答
3

由于Math.random返回介于[0,1)(1不包括在内) 之间的实数,因此乘以结果会返回介于 之间的实数[0, 52)

由于您正在计算结果,因此返回的最大数量是51并且有52不同的值(计数0)。

于 2012-10-14T18:22:51.743 回答
2

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

于 2012-10-14T18:19:55.597 回答