2015-12-10 5 views
3

В курсе Академии JS, Dragon Slayer 2/6, следующий текст используется в подсказке, чтобы описать порядок операций для кода, включенного в заголовок.Порядок действий для Math.floor (Math.random() * 5 + 1)?

Как работает этот код?

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

  • Сначала мы используем Math.random(), чтобы создать случайное число от 0 до 1. Например, 0,5

  • Затем мы умножаем на 5, чтобы сделать случайное число от 0 до 5. Например, 0,5 * 5 = 2,5

  • Далее мы используем Math.floor() для округления до целого числа. Например,> Math.floor (2,5) = 2

  • Наконец мы добавим 1, чтобы изменить диапазон от от 0 до 4, чтобы между 1 и 5> (вплоть до и включая 5)

Я искал это в нескольких разных местах (here и here), и большинство из них либо сосредоточено на диапазоне, который производит Math.random() (что я понимаю), либо подтверждают порядок операций, описанных в подсказке , где «Math.floor» действует на «Math.random() * 5» до добавления «+1».

Мне кажется, однако, что согласно порядку операций, которые я изучил в школе, последние два шага должны быть перевернуты. Разве это не так, поскольку «Math.random() * 5» и «+ 1» находятся в скобках?

Хотя разница между этими двумя может не повлиять на значение, полученное от этого конкретного кода, я мог видеть, что фундаментальное изменение в порядке работы, как описано здесь, может вызвать у меня некоторое разочарование в будущем, если Я этого не знал.

+3

Объяснение, данное для этого выражения, неверно. – zerkms

+2

Все в круглых скобках, в которых завершается аргумент 'Math.floor', должен возвращать число с плавающей точкой. Таким образом, порядок должен быть: 'Math.random()', который возвращает float между 0 и 0.9999 ... Затем умножьте это на 5, затем добавьте 1. Затем, наконец, 'Math.floor' его –

ответ

6

Math.floor() будет работать над тем, что находится внутри скобок, после того, как оно было рассчитано.

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

такая же, как

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

Спасибо. Я чувствовал, что я принимаю сумасшедшие таблетки, но не хотел думать о чем-то таким образом, чтобы потом укусить меня. –

4

Вы правы, что формулировка на странице неправильно. Последнее, что произойдет, это вызов floor. Сначала все в скобках будет обработано.

2

Честно говоря, я думаю, что они перепутали здесь, и вы правы. Согласно PEMDAS и любой математике, которую я когда-либо узнал, +1 приходит перед функцией Math.floor.

0

Функция Math.random() возвращает случайное число в диапазоне [0, 1), которое равно 0 (включительно), но не включает 1 (исключение). Это может быть любая вещь, такая как 0, .34, .42 и т. Д. , если вы хотите случайное число между 0-5. вы будете использовать Math.Random() * 5. Это даст вам любое количество, например 0,4.43.4.34, но не пять. Затем мы добавляем 1, как этот Math.random() * 5 + 1. Теперь есть вероятность, что вы получите число от 0 до 6. Но вы не хотите, чтобы число было выше 5. так что вы применяете метод пола, который вернет наибольшее целое число, меньшее или равное заданному числу.