Нужно объяснение этого JavaScript - PullRequest
0 голосов
/ 02 января 2012

У меня есть вопрос об этом скрипте, который я нашел и использовал. Это работает, но я не понимаю, почему. Упражнение состояло в том, чтобы составить список со случайными числами от -50 до 50. В приведенной ниже функции используется Math.floor(Math.random() * (часть, которую я не понимаю).

Если я поставлю этот расчет в Google, я получу ответ 151, а Math.random()*151 не получится от -50 до 50.

Может ли кто-нибудь дать мне четкое объяснение этой функции ниже, потому что я уверен, что что-то упустил.

этот скрипт работает, но мне нужно только четкое объяснение, как

for (i = 0; i <= 100; i++)
{
    Rnumber[i] = randomFromTo(-50,50);
}

function randomFromTo(from, to)
{
    return Math.floor(Math.random() * (to - from + 1) + from);
}

Ответы [ 3 ]

9 голосов
/ 02 января 2012
to - from + 1 = 50 - (-50) + 1 = 101
Math.random() * 101 = number in range [0,101[
Math.floor([0,101[) = integer in range [0,100]
[0,100] + from = [0,100] + (-50) = integer in range [-50,50]

Это именно то, о чем просят.

3 голосов
/ 02 января 2012

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/random

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

, который при умножении на число> 1 и с полами дает целое число

0 голосов
/ 02 января 2012

Math.random() - получить только значение от 0 до 1. Math.floor( number ) получить целое число с округлением до нуля.
Вы должны:

function randomFromTo(from, to)
{
  // you can use doubled bitwise NOT operator which also as Math.floor get integer value from number but is much faster.
  // ~1 == -2 , ~-2 == 1 and   ~1.5 == -2 :)

 return  ~~( --from + ( Math.random() * ( ++to - from )) )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...