js随机数

rando

最近在做公司活动时有个类似弹幕的东西,在写的时候有产生随机数的过程,这个每次都是在看高级教程时候看到,每次竟然都没有理解然后还把那个有个类似公式的东西背起来了。可是,一旦忘了就很尴尬了。正好这次自己搜了下,一看,我的妈呀,这个我怎么当时就没看懂呢,我他妈的是猪吗。。。。。。

js中的Math.random()函数返回的是一个[0, 1)的数字,如:

random-console

根据上面我们就可以知道Math.random()*5产生[0,5)之间的小数,那要是想得到整数呢?Math.floor()Math.ceil()就有用武之地了。

1
2
3
4
5
6
7
8
/* 产生[0, 4]. */
Math.floor(Math.random() * 5);
/* 产生[0, 5]. */
Math.ceil(Math.random() * 5);
/* parsetInt和floor函数是一个作用,说明是向下取舍的. */
parseInt(Math.random() * 5, 10);

现在,如果要取1到10的随机数,就成了:

1
2
3
4
5
6
7
8
9
Math.floor(Math.random() * 10) + 1;
// 或
Math.ceil(Math.random() * 10);
// 或
parseInt(Math.random() * 5, 10) + 1;

于是,就有了每次看到的各种公式!什么?你没见过。。。。。。

我给没见过的贴下吧!

1
2
3
4
5
6
7
8
9
10
/* 产生0到一个数字. */
// max - 期望的最大值
parseInt(Math.random() * max, 10) + 1;
Math.floor(Math.random() * max) + 1;
Math.ceil(Math.random() * max);
/* 产生1到一个数字. */
// max - 期望的最大值
parseInt(Math.random() * (max + 1), 10);
Math.floor(Math.random() * (max + 1));

还有一个就是从一个任意数到另一个任意数,公式:

1
2
3
4
// max - 期望的最大值
// min - 期望的最小值
parseInt(Math.random() * (max - min + 1) + min, 10);
Math.floor(Math.random() * (max - min + 1) + min);

这次还背吗?蒙圈了吧,我就也是蒙圈了T_T!,不过,这次我的思路就是整明白了,比如我想要[4, 11]的数,那么就是:

  1. Math.random()产生[0, 1)
  2. 所以[4, 11] == [4, 12)
  3. 最小置0,就是都减1,[0, 8)
  4. 产生上面结果就是Math.floor(Math.random() * 8)
  5. 最后把减去的加回来,就是Math.floor(Math.random() * 8 + 4)

这就是我的理解,估计这次是忘不了了!
leiben