Math.floor(Math.random() * 5 + 1) 的操作顺序?

Order of operations for Math.floor(Math.random() * 5 + 1)?

在Code Academy JS课程中,屠龙2/6,提示中使用了以下文本来描述我在标题中包含的代码的操作顺序。

How does this code work?

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

  • First we use Math.random() to create a random number from 0 up to 1. For example, 0.5

  • Then we multiply by 5 to make the random number from 0 up to 5. For >example, 0.5 * 5 = 2.5

  • Next we use Math.floor() to round down to a whole number. For example, >Math.floor( 2.5 ) = 2

  • Finally we add 1 to change the range from between 0 and 4 to between 1 and >5 (up to and including 5)

我在几个不同的地方 (here and here) 查过这个,其中大部分要么关注 Math.random() 产生的范围(我理解),要么确认提示中概述的操作顺序,其中 "Math.floor" 在添加“+1”之前作用于 "Math.random()*5"。

不过我觉得,按照我在学校学的操作顺序,最后两步应该是翻转过来的。因为 "Math.random()*5" 和“+ 1”都在括号内,所以情况不是这样吗?

虽然这两者之间的差异可能不会对该特定代码返回的值产生影响,但我可以看到操作顺序的根本变化,就像这里概述的那样,这会让我在以后的道路上感到有些沮丧如果我不知道的话。

Math.floor() 将在计算后对括号内的任何内容起作用。

Math.floor(Math.random() * 5 + 1)

相同
var i = Math.random() * 5;
i += 1;
Math.floor(i);

你是对的,页面上的措辞是错误的。最后会发生的事情是 floor 调用。括号中的所有内容将首先处理。

老实说,我认为他们在这里混淆了,你是对的。根据 PEMDAS 和我学过的任何数学,+1 出现在 Math.floor 函数之前。

Math.random() 函数 return 是 [0, 1) 范围内的随机数,即从 0(含)到但不包括 1(不含)。它可以是任何东西,例如 0、.34、.42 等。 如果你想要 0-5 之间的随机数。 您将使用 Math.Random()*5。这会给你任何数字,比如 0,4.43.4.34 但不是 5。 然后我们像这样加 1 Math.random() * 5 + 1。现在你很可能会得到一个介于 0 和 6 之间的数字。但你不希望数字超过 5。所以 您应用 floor 方法,该方法将 return 小于或等于给定数字的最大整数。