需要解释这个javascript

时间:2012-01-02 17:47:21

标签: javascript math

我对我找到并使用的这个脚本有疑问。它有效,但我不明白为什么。练习是使用从-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 个答案:

答案 0 :(得分: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]

这正是要求的。

答案 1 :(得分:3)

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

  

Math.random返回一个浮点伪随机数   范围[0,1]即从0(包括)到最多但不包括1   (独家),然后您可以缩放到您想要的范围。

当乘以数字&gt; 1和floored给你一个整数

答案 2 :(得分: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 )) )
}