JS生成限定整数区间范围内的随机整数
对于整数区间获取随机整数:
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生成限定整数区间范围内的随机整数的更多相关文章
- js生成一定范围内的随机整数
Math.floor(Math.random()*(m-n+1)+n) Math.floor(Math.random() * (50 - 1 + 1) + 1): 生成1-50内的随机整数
- 【VBA】返回指定范围内的随机整数
返回指定范围内的随机整数: Sub main() Randomize Debug.Print 随机整数(1, 2) End Sub Function 随机整数(a As Integer, b As I ...
- js 获取某个某个区间内的随机整数
//获取某个某个区间内的随机整数 ,获取到的值域为[min,max)function get_random_num(min,max){ if(/^-?\d+$/.test(min) && ...
- js输出指定n位数的随机数的随机整数方法【转发】
/** * Description:[输出指定n位数的随机数的随机整数] * * @param n 指定n位数 * */ function RndNum(n) { var rnd = "&q ...
- js生成一个指定范围内的随机整数
function __random(start=0, end=1) { return Math.floor(Math.random() * (end - start + 1) + start); } ...
- js产生任意2个区间内的随机整数
var code = myRound(30,100); function myRound(begin,end){ var num = Math.round(Math.random()*(end-beg ...
- 通过JS生成由字母与数字组合的随机字符串
在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...
- 【前端】JavaScript获取指定范围内的随机整数
function getRandomIntNumber(min, max) { var span = max - min + 1; var result = Math.floor(Math.rando ...
- JS生成指定范围内的随机数(支持随机小数)
直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...
随机推荐
- C++ 构造函数、拷贝构造函数、赋值运算符
<C++ Primer Plus> 12.1 动态内存和类 12.1.1 复习示例和静态类成员 不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存 如果在头文 ...
- Rust之路(4)——所有权
[未经书面同意,严禁转载] -- 2020-10-14 -- 所有权是Rust的重中之重(这口气咋像高中数学老师 WTF......). 所有权是指的对内存实际存储的数据的访问权(包括读取和修改),在 ...
- 搭建分布式 Redis Cluster 集群与 Redis 入门
目录 Redis 集群搭建 Redis 是啥 集群(Cluster) Redis Cluster 说明 Redis Cluster 节点 Redis Cluster 集群模式 不能保证一致性 创建和使 ...
- spring boot:给接口增加签名验证(spring boot 2.3.1)
一,为什么要给接口做签名验证? 1,app客户端在与服务端通信时,通常都是以接口的形式实现, 这种形式的安全方面有可能出现以下问题: 被非法访问(例如:发短信的接口通常会被利用来垃圾短信) 被重复访问 ...
- Pytest之使用断言指定异常
官网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pyte ...
- 为iOS编译FFmpeg静态库
为iOS编译FFmpeg静态库 环境:OS X Yosemite (版本10.10.5) Xcode (Version 7.1.1 (7B1005)) 一.资料准备: (1)ffmpeg源 ...
- 【API进阶之路】研发需求突增3倍,测试团队集体闹离职
摘要:最近研发的需求量涨了3倍,开发团队拼命赶进度,可苦了测试团队. 本以为从一线研发转管理后会清闲一些,但是没想到,我还要充当救火队员的角色. 到了第四季度,各业务部门都在憋着劲儿冲业绩,毕竟这跟年 ...
- byte + byte = int
byte+byte=int,低级向高级是隐式类型转换,高级向低级必须强制类型转换,byte<char<short<int<long<float<double
- 常用手册或官网的url
1.mysql--> https://www.mysql.com/ 2.菜鸟教程--> http://www.runoob.com 3.maven官网--> https://mave ...
- sqlServer数据库中的日期转换
今天开发过程中涉及到 sqlServer数据库数据同步至mysql数据,所以对日期格式转换需求,查到了一些关于sqlServer 的日期转换内容: 一般存入数据库中的时间格式为yyyy-mm-ddhh ...