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