当前位置:首页 > 日记 > 正文

js生成随机数方法和实例

js生成随机数方法和实例

js生成一切随机数的基础都是Math.random(),这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间。所以当有一些特殊需求的时候,就势必要进行一些其它的操作,下面对各种需求进行简单的分析:

生成任意区间的整数

1.全闭区间[n,m]

这种的最常见,大家都知道的那一长串公式:Math.floor(Math.random()*(m-n+1))+n;就是生成这个全闭区间的方法。说到这个公式很多人都知道,但真正想明白的人估计很少。先生成一个[0,m-n+1)这样左闭右开的区间,然后用Math.floor()取到[0,m-n]之间内的任意整数(看明白这一步很关键),之后加上区间左端点变成[n,m]内的任意整数,达到目的。

说到这个地方,有一点必须提一下,随便搜一下js生成随机数,有很多文章都会用Math.ceil()Math.round()这两个方法,比如生成全闭的[n,m]区间内的任意整数,Math.ceil(Math.random()*(m-n))+n;或者Math.round(Math.random()*(m-n))+n;我感觉随机数,最重要的就是随机两个字,每个值取到的概率一定要相等,这一点对于一些特定的场合非常重要,比如抽奖(年会都有抽奖的吧)。

Math.ceil()的毛病是n<<m≈x,x为除端点之外的数,区间足够大的话n几乎取不到,m和x的概率几乎相等,因为m这个点取不到所以概率相对来说小了一点。Math.round()的毛病是n≈m=x/2,原因和前面的差不多,不明白的可以自己画个坐标轴,很明了。

2.全开区间(x,y)

其实只要记住上面的全闭区间,其它所有区间的开闭,都可以由其推到,过程如下:
(x,y) ==[x+1,y-1];也就是说n=x+1; m=y-1;将其代入上面的公式就可以得到:Math.floor(Math.random()*(y-x-1))+x+1;

3.左闭右开[x,y)

同理,[x,y) == [x,y-1];代入得到:Math.floor(Math.random()*(y-x))+x;

4.左开右闭(x,y]

(x,y]==[x+1,y];代入得到:Math.floor(Math.random()*(y-x))+x+1;

生成任意区间内的浮点数

这种实际当中用到的比较少,但也挺有意思的。

[n,m)

这种最简单,因为和random的特点保持一致。Math.rondom()*(m-n)+n;

因为random的这种特点,想要取到其它区间内的浮点数就比较困难了。需要借助一些判断才能才能满足要求。思想和上面去整数的一样。代码如下:

    function fullClose(n,m) { //[n,m]      var result = Math.random()*(m+1-n)+n;      while(result>m) {        result = Math.random()*(m+1-n)+n;      }      return result;    }    function fullOpen(n,m) { // (n,m)      var result = Math.random()*(m-n)+n;      while(result == n) {        result = Math.random()*(m-n)+n;      }      return result;    }    function leftOpen(n,m) { // (n,m]      var result = Math.random()*(m-n+1)+n-1;      while(result<n) {        result = Math.random()*(m-n+1)+n-1;      }      return result;    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

滤镜插件怎么在ps中安装

滤镜插件怎么在ps中安装

安装,插件,滤镜,方法,电脑软件,  在ps中有很多下载的滤镜都可以使用,这些就是滤镜插件。其实这个也不算太难,下面就让小编告诉你滤镜插件怎么在ps中安装的方法,一起学习吧。滤镜插件在ps中安装的方法首先找到下好的插件这里我以Silver Efex …

excel if函数多层嵌套的使用方法

excel if函数多层嵌套的使用方法

函数,嵌套,多层,使用方法,电脑软件,  excel中有很多时候会需要用到IF这个函数,而这个函数是可以多层嵌套的,就是多层条件、关系,接下来请欣赏小编给大家网络收集整理的excel if函数多层嵌套的使用方法。excel if函数多层嵌套的使用方法excel…

excel怎么制作甘特图excel制作甘特

excel怎么制作甘特图excel制作甘特

甘特图,步骤,方法,电脑软件,excel,  利用excel制作甘特图,可以明确表示并行处理的任务,每个任务处理所需要的时间等,那么,下面小编就教你们怎么怎么做一个甘特图。希望对你有帮助!excel制作甘特图的步骤 1.添加辅助列  在数据区域原C列左侧…

如何利用书籍版式设计一个PPT封面

如何利用书籍版式设计一个PPT封面

版式,封面,书籍,电脑软件,PPT,  不知道大家有没有看过书籍版式的PPT封面,书籍封面的PPT看起来有些文艺风,给人一种挺好的视觉体验。以下是小编为您带来的关于利用书籍版式设计一个PPT封面,希望对您有所帮助。利用书籍版式设计一个PPT封面具…

word2010怎么调整标题间距word2010

word2010怎么调整标题间距word2010

调整,步骤,方法,间距,标题,  文档标题过长,通过调整字与字的间距实现标题缩短,具体怎么做下面小编来告诉你吧。word2010调整标题间距的步骤第一步,把该WORD文档标题选中,方便后续处理。所中状态为此行有底色,如下图所示。word2010调整标题间距…

ppt裁剪成圆形图有什么方法步骤

ppt裁剪成圆形图有什么方法步骤

步骤,图片裁剪,方法,有什么,电脑软件,  PPT如今排版图片编辑越来越成熟,圆形图片比以往只是简简单单一个图片更加的有艺术感,在ppt中想要将图片裁剪成圆形,该怎么裁剪。以下是小编为您带来的关于ppt图片裁剪成圆形图,希望对您有所帮助。ppt图…

Word2016文档如何解决色块中文字显

Word2016文档如何解决色块中文字显

文字,显示不全,文档,如何解决,电脑软件,  很多朋友在使用Word,特别是做海报,简历的时候,会遇到这种状况:插入一个色块,往里头输入文字,字有些部分没办法显示,改了段落间距也没办法,很是头疼。以下是小编为您带来的关于Word2016文档色块中文字显示…

PPT2010自动播放功能有哪些设置方

PPT2010自动播放功能有哪些设置方

方法,设置,自动播放,功能,有哪些,  PPT自动播放这个词,相信大家已经耳熟能详了。其实在对PPT进行自动播放设置之前,是要先设置好每张幻灯片的换片时间的。以下是小编为您带来的关于PPT2010自动播放功能设置方法,希望对您有所帮助。PPT2010自…

word使用邮件合并功能的两种方法邮

word使用邮件合并功能的两种方法邮

合并,邮件,方法,功能,两种,  计算机二级办公软件考试中会遇到使用邮件合并功能进行操作,你知道怎么操作吗?如果不知道,那就跟着小编一起试试吧!word使用邮件合并功能方法一1打开WORD缴费通知书模板word使用邮件合并功能图1  2单击邮件&md…

QQ兴趣部落回复如何不显示地理位置

QQ兴趣部落回复如何不显示地理位置

地理位置,显示,兴趣,部落,电脑软件,  手机QQ兴趣部落自出现以后,受到广大网友的好评,不用特地逛贴吧搜索自己感兴趣的话题,只用查看QQ部落里的分类即可解决,而且还可以认识许多朋友哦。为了保持神秘感,大多数人都是不愿意把自己所在的地理位置…

QQ聊天记录的无法显示怎么办qq聊天

QQ聊天记录的无法显示怎么办qq聊天

无法显示,删除,方法,解决方法,聊天记录,  我们在查看QQ聊天记录时,有时图片裂了无法显示,这该怎么解决呢?以下小编整理的怎样解决QQ聊天记录的图片无法显示,供大家参考,希望大家能够有所收获!QQ聊天记录的图片无法显示的解决办法很多时候,我们…

excel2007 乘法运算的方法

excel2007 乘法运算的方法

方法,运算,乘法,电脑软件,  在Excel中经常需要用乘法进行统计数据,乘法运算在公式中算是比较基本的公式,如果还不懂得如何运用的朋友不妨学习一番。下面是小编带来的关于excel2007 乘法运算的方法,希望阅读过后对你有所启发!excel2007 乘法…