2012-01-02 4 views
0

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

Если я ставлю этот расчет на гугле я получил в ответ 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); 
} 
+0

спасибо bobbymcr для коррекции мой плохой английский. – JochemQuery

ответ

9
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] 

Какой именно то, что просят.

+0

Спасибо, это то, что я считаю – JochemQuery

+0

Быстрый вопрос: возвращает ли Math.random() когда-либо 1.0? И если это так, разве это не означает, что «51» можно вернуть из функции randomFromTo OP? – selbie

+0

Нет, это не так. Он никогда не включает 1.0. –

3

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

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

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

0

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))) 
} 
Смежные вопросы