Зачем мне объединять Math.floor с Math.random? - PullRequest
11 голосов
/ 04 ноября 2011

Зачем кому-то звонить Math.floor на Math.random результате?Я видел, как это используется как:

Math.floor(Math.random() * num);

Может кто-нибудь объяснить, пожалуйста?

Ответы [ 7 ]

17 голосов
/ 04 ноября 2011

Math.random возвращает число с плавающей точкой в диапазоне от 0 до 1.

Возвращает псевдослучайное число с плавающей точкой в ​​диапазоне [0, 1), то есть от 0 (включительно) до, но не включая 1 (исключая), которое затем можно масштабировать до желаемого диапазона.

Умножение на n дает число с плавающей запятой от 0 (включительно) до n (исключая).

Math.floor затем используется для преобразования этого числа с плавающей запятой в целое число между 0 и n - 1 (включительно).

14 голосов
/ 04 ноября 2011

Зачем кому-то вызывать Math.floor для результата Math.random?

В двух словах, каждый вызывает Math.floor(), если вы хотите усечь десятичное значение до ближайшего целого числа.(просто отбрасывая десятичную часть. Таким образом, 3.9 становится 3, 2.1 становится 2, и т. д. Итак, вы обычно используете это, когда вам нужно целое число и вы хотите, чтобы целое число было меньше или равно десятичному значению.Математическая библиотека также имеет Math.ceil() и Math.round(). Math.ceil() возвращает вам следующее большее целое число, Math.round() округляет до ближайшего целого числа, увеличиваясь или уменьшаясь в зависимости от того, что ближе.

Я видел, что это используется как: Math.floor(Math.random() * num);

Разбивая Math.floor(Math.Random() * num) на отдельные части и объясняя каждую часть, вы получаете это:

Math.random() дает вамслучайное десятичное число от 0 до 1, включая 0, но не включая 1. Таким образом, оно может дать вам что-то вроде 0.38548569372.

Math.random() * num дает случайное десятичное число от 0 до num, включая0, но не включая число., если num было 10, это может дать вам 3.8548569372.

Math.floor(Math.random() * num)) дает вам случайное целое число от 0 до num, включая 0, но не включая num.Таким образом, это может дать вам 3.

Math.floor() усекает десятичное число только до целой части.Случайное целое число часто используется для получения случайного значения из массива (который должен быть целым числом).

1 голос
/ 04 ноября 2011

Зачем мне объединять Math.floor с Math.random?

Вы объединяете их, потому что в противном случае он вернул бы число с плавающей точкой Использование Math.floor гарантирует, что это целое число внутри указанного диапазона.

Math.random возвращает квартиру в диапазоне от 0 до 1. Умножая ее на ваш num или максимальный диапазон, вы получаете значение с максимальным значением этого числа (1 * num). Итак, еще раз, Math.floor просто заставляет его быть целым числом.


За кулисами:

СЛУЧАЙНЫЙ НОМЕР -> .35 -> Умножается на max (num) из 11 -> Получает 3,85 -> Math.floor (3,85) -> 3.


Имейте в виду , num - это MAX + 1 . Установка num в 5 будет генерировать только цифры 1-4!


Вы можете проверить эту ссылку для получения дополнительной информации: http://www.javascriptkit.com/javatutors/randomnum.shtml

Тада:)

1 голос
/ 04 ноября 2011

Math.random() даст вам длинный, случайный десятичный знак.Обычно нужно умножить это десятичное число на 10, 100, 1000 и т. Д., Чтобы получить случайное целое число.Однако, поскольку такой десятичный знак очень длинный, чтобы получить абсолютное целое число, используйте Math.floor() для округления этого числа вниз.

0 голосов
/ 07 апреля 2017
var num = Math.floor(Math.random() * 1000); // e.g. 885

var flNum = Math.random() * 1000; //e.g. 885.9936205333221

Попробуйте Math.random () * 1000, например, вы можете получить что-то вроде этого: 885.9936205333221, во многих случаях нам нужно округленное число, поэтому многие разработчики используют его с Math.floor или Math.ceil, чтобы получитьцелое число, например 885, если в вашем случае вы не против иметь число с плавающей запятой, оставьте его как есть ...

Для получения дополнительной информации о том, как работает Math.floor, перейдите по этой ссылке:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

0 голосов
/ 07 апреля 2017

Используется для получения целого случайного числа от 0 до (макс. - 1).

С другой стороны, быстрее использовать | 0, как в

const randomInt = Math.random() * num | 0;

. | 0 - это двоичный файл или из 0, который в спецификации JavaScript фактически говорит, что результат преобразуется в целое число до того, как произойдет |.Обратите внимание, что | 0 - это не то же самое, что Math.floor.| 0 округляет до 0, тогда как Math.floor округляет.

         | 0   Math.floor         
------+------+------------
  2.5 |   2  |   2
  1.5 |   1  |   1
  0.5 |   0  |   0
 -0.5 |   0  |  -1
 -1.5 |  -1  |  -2
 -2.5 |  -2  |  -3
0 голосов
/ 04 ноября 2011

Math.random() возвращает что-то вроде 0.8747230430599302 между [0,1)

Мы используем .floor, чтобы округлить его до ближайшего целого числа. Например:

Math.random()*5 == 2.5889716914389282 Это генерирует число между [0,5).

Math.floor(Math.random()*5) == 2 //in this scenario Генерирует число между [0,4]

...