对于整数区间获取随机整数:

m,n均为整数,且n>m。

获取[m,n)区间内的随机整数:

1 var aNumber = (n - m) * Math.random() + m;
2 var result = Math.floor(aNumber);

获取获取[m,n]区间内的随机整数:

1 var aNumber = (n+1- m) * Math.random() + m;
2 var result = Math.floor(aNumber);

获取对于区间(m,n)的随机整数,JS代码:

1 var aNumber = (n-1- m) * Math.random() + (m+1);
2 var result = Math.floor(aNumber);

获取获取(m,n]区间内的随机整数:

1 var aNumber = (n- m) * Math.random() + (m+1);
2 var result = Math.floor(aNumber);

推导过程:

Math.random()的值为数学上的半开半闭区间[0,1),即0≤Math.random()<1。在JS中生成限定范围内的随机整数其实也是基于Math.random()来操作实现的随机整数。

1、通过Math.random()获取[0,10)之间的随机整数。

1 var aNumber = 10 * Math.random();
2 var result = Math.floor(aNumber);

aNumber的值在[0,1)区间取值为0,依次类推到[9,10)区间取值为9,每个区间长度值一样,所代表的数同样多,aNumber在每个区间内的概率相同。

先看几个类似的随机整数的试题:

1、JS随机生成[20,50)区间内的随机整数;

2、JS随机生成[20,50]区间内的随机整数;

3、JS随机生成(20,50)区间内的随机整数;

4、JS随机生成(20,50]区间内的随机整数。

先转换为数学问题(需要基础的初中数学代数知识)

为书写方便,我们令α=Math.random(),0≤α<1,K代表生成区间内的随机整数。

1、JS随机生成[20,50)区间内的随机整数。

20≤K<50

化简:

0≤K-20<30

0≤(K-20)/30<1

即(K-20)/30=α

K=30α+20

由于α是[0,1)的随机数,30α+20还不满足要求,需要整数,对K进行向下取整操作:Math.floor(K)

转换为JS代码:

1 var aNumber=(50-20)*Math.random()+20 ;
3 var result= Math.floor(aNumber);

推广到一般情况下,对于正整数区间[m,n)的随机整数,JS代码:

var aNumber = (n - m) * Math.random() + m;
var result = Math.floor(aNumber);

2、JS随机生成[20,50]区间内的随机整数;

与“JS采用随机生成[20,50)区间内的随机整数”相比,就是一个需要取末尾闭区间,随机整数要可以取50。

等效于JS采用Math.floor()随机生成[20,50+1]区间内的随机整数;

推广到一般情况下,对于区间[m,n]的随机整数,JS代码:

1 var aNumber = (n+1 - m) * Math.random() + m;
2 var result = Math.floor(aNumber);

思考:采取下列方式似乎同样可以获得[20,50]的随机整数,这么做会有什么问题?

1 var aNumber = (50 - 20) * Math.random() + 20;
2 var result = Math.round(aNumber);

即对[20,50)区间内的随机数进行四舍五入的操作,同样可以实现K的取值范围为[20,50],这样做会产生什么问题?

3、JS采用Math.floor()随机生成(20,50)区间内的随机整数;

等效于JS采用Math.floor()随机生成[21,50)区间内的随机整数;

推广到一般情况下,对于区间(m,n)的随机整数,JS代码:

1 var aNumber = (n-1 - m) * Math.random() + (m+1);
2 var result = Math.floor(aNumber);

4、JS采用Math.floor()随机生成(20,50]区间内的随机整数。

等效于JS采用Math.floor()随机生成[21,51)区间内的随机整数;

推广到一般情况下,对于区间(m,n]的随机整数,JS代码:

1 var aNumber = (n - m) * Math.random() + m+1;
2 var result = Math.floor(aNumber);

思考:采用Math.ceil()与Math.random()实现上述随机整数可能产生什么问题? 如果不明白可以到下方留言哦。

JS生成限定整数区间范围内的随机整数的更多相关文章

  1. js生成一定范围内的随机整数

    Math.floor(Math.random()*(m-n+1)+n) Math.floor(Math.random() * (50 - 1 + 1) + 1): 生成1-50内的随机整数

  2. 【VBA】返回指定范围内的随机整数

    返回指定范围内的随机整数: Sub main() Randomize Debug.Print 随机整数(1, 2) End Sub Function 随机整数(a As Integer, b As I ...

  3. js 获取某个某个区间内的随机整数

    //获取某个某个区间内的随机整数 ,获取到的值域为[min,max)function get_random_num(min,max){ if(/^-?\d+$/.test(min) && ...

  4. js输出指定n位数的随机数的随机整数方法【转发】

    /** * Description:[输出指定n位数的随机数的随机整数] * * @param n 指定n位数 * */ function RndNum(n) { var rnd = "&q ...

  5. js生成一个指定范围内的随机整数

    function __random(start=0, end=1) { return Math.floor(Math.random() * (end - start + 1) + start); } ...

  6. js产生任意2个区间内的随机整数

    var code = myRound(30,100); function myRound(begin,end){ var num = Math.round(Math.random()*(end-beg ...

  7. 通过JS生成由字母与数字组合的随机字符串

    在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...

  8. 【前端】JavaScript获取指定范围内的随机整数

    function getRandomIntNumber(min, max) { var span = max - min + 1; var result = Math.floor(Math.rando ...

  9. JS生成指定范围内的随机数(支持随机小数)

    直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...

随机推荐

  1. C++ 构造函数、拷贝构造函数、赋值运算符

    <C++ Primer Plus> 12.1 动态内存和类 12.1.1 复习示例和静态类成员 不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存 如果在头文 ...

  2. Rust之路(4)——所有权

    [未经书面同意,严禁转载] -- 2020-10-14 -- 所有权是Rust的重中之重(这口气咋像高中数学老师 WTF......). 所有权是指的对内存实际存储的数据的访问权(包括读取和修改),在 ...

  3. 搭建分布式 Redis Cluster 集群与 Redis 入门

    目录 Redis 集群搭建 Redis 是啥 集群(Cluster) Redis Cluster 说明 Redis Cluster 节点 Redis Cluster 集群模式 不能保证一致性 创建和使 ...

  4. spring boot:给接口增加签名验证(spring boot 2.3.1)

    一,为什么要给接口做签名验证? 1,app客户端在与服务端通信时,通常都是以接口的形式实现, 这种形式的安全方面有可能出现以下问题: 被非法访问(例如:发短信的接口通常会被利用来垃圾短信) 被重复访问 ...

  5. Pytest之使用断言指定异常

    官网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pyte ...

  6. 为iOS编译FFmpeg静态库

    为iOS编译FFmpeg静态库 
 环境:OS X Yosemite (版本10.10.5) Xcode (Version 7.1.1 (7B1005)) 
 
 一.资料准备: (1)ffmpeg源 ...

  7. 【API进阶之路】研发需求突增3倍,测试团队集体闹离职

    摘要:最近研发的需求量涨了3倍,开发团队拼命赶进度,可苦了测试团队. 本以为从一线研发转管理后会清闲一些,但是没想到,我还要充当救火队员的角色. 到了第四季度,各业务部门都在憋着劲儿冲业绩,毕竟这跟年 ...

  8. byte + byte = int

    byte+byte=int,低级向高级是隐式类型转换,高级向低级必须强制类型转换,byte<char<short<int<long<float<double

  9. 常用手册或官网的url

    1.mysql--> https://www.mysql.com/ 2.菜鸟教程--> http://www.runoob.com 3.maven官网--> https://mave ...

  10. sqlServer数据库中的日期转换

    今天开发过程中涉及到 sqlServer数据库数据同步至mysql数据,所以对日期格式转换需求,查到了一些关于sqlServer 的日期转换内容: 一般存入数据库中的时间格式为yyyy-mm-ddhh ...