javascript生成随机数方法汇总


Posted in Javascript onNovember 12, 2015

今天有又网友问到我 JavaScript 怎么生成指定范围数值随机数。Math.random() 这个方法相信大家都知道,是用来生成随机数的。不过一般的参考手册时却没有说明如何用这个方法来生成指定范围内的随机数。这次我就来详细的介绍一下Math.random(),以及如何用它来生成制定范围内的随机数。

基础教程请看这里

看完教程,应该知道Math.random()方法的基本用法了。

利用 parseInt()、Math.floor() 或者 Math.ceil()进行四舍五入处理

我们看到,直接使用Math.random()方法,生成的是一个小于1的数,所以:

Math.random()*5

得到的结果是一个小于5的随机数。而我们通常希望得到的是0-5之间的整数,所以我们需要对得到的结果四舍五入处理一下,从而得到我们期望的整数。parseInt()、Math.floor()和Math.ceil()都可以起到四舍五入的作用。

var randomNum = Math.random()*5;
alert(randomNum); // 2.9045290905811183 
alert(parseInt(randomNum,10)); // 2
alert(Math.floor(randomNum)); // 2
alert(Math.ceil(randomNum)); // 3

由测试的代码我们可以看到,parseInt()和Math.floor()的效果是一样的,都是向下取整数部分。所以parseInt(Math.random()*5,10)和Math.floor(Math.random()*5)都是生成的0-4之间的随机数,Math.ceil(Math.random()*5)则是生成的1-5之间的随机数。

生成指定范围数值随机数

所以,如果你希望生成1到任意值的随机数,公式就是这样的:

// max - 期望的最大值
parseInt(Math.random()*max,10)+1;
Math.floor(Math.random()*max)+1;
Math.ceil(Math.random()*max);

如果你希望生成0到任意值的随机数,公式就是这样的:

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

如果你希望生成任意值到任意值的随机数,公式就是这样的:

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

下面我们来看看javascript生成随机数的其他方法

1.使用内置的随机数发生方法:(刚刚讲过,这里简单描述下)

Math.random(); //该方法产生一个0到1之间的浮点数。
Math.floor(Math.random()*10+1); //1-10
Math.floor(Math.random()*24);//0-23

2.基于时间,亦可以产生随机数:

var now=new Date(); 

var number = now.getSeconds(); //这将产生一个基于目前时间的0到59的整数。
var now=new Date(); 

var number = now.getSeconds()%43; //这将产生一个基于目前时间的0到42的整数。

3.一个相当优秀的的随机数发生器程序,能应用于许多领域。

<script language="JavaScript"><!--
// The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)
// See: http://www.msc.cornell.edu/~houle/javascript/randomizer.html 
rnd.today=new Date();
rnd.seed=rnd.today.getTime();
function rnd() {

rnd.seed = (rnd.seed*9301+49297) % 233280;


return rnd.seed/(233280.0);
};
function rand(number) {


return Math.ceil(rnd()*number);
};
// end central randomizer. -->
</script>

我们再来看2个具体的实例吧,

第一种方法通过重写Math.random方法实现,第二种方法改自一个C实现,都可以实现编程目的。

实例一:

<script language="javascript">  
var native_random = Math.random;
Math.random = function(min, max, exact) {
	if (arguments.length === 0) 
	{
		return native_random();
	} 
	else if (arguments.length === 1) 
	{
		max = min;
		min = 0;
	}
	var range = min + (native_random()*(max - min));
	return exact === void(0) ? Math.round(range) : range.toFixed(exact);
};
document.write(Math.random());
document.write('<br />');
document.write(Math.random(10));
document.write('<br />');
document.write(Math.random(3,10));
document.write('<br />');
document.write(Math.random(2,10,4));
</script>

实例二:

<script type="text/javascript">
var random = (function(){
	var high = 1, low = 1 ^ 0x49616E42;
	var shuffle = function(seed){
		high = seed;
		low = seed ^ 0x49616E42;
	}
	
	return function(){
  	var a = new Date()-0
   	shuffle(a);
  	high = (high << 16) + (high >> 16);
  	high += low;
  		low += high;
   	return high;
 	}
})();
 
alert( random() );
</script>

好了,通过这些例子,大家应该对javascript生成随机数有了相应的了解,希望本文能够给大家一些启发。

Javascript 相关文章推荐
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 Javascript
JS之if语句对接事件动作逻辑(详解)
Jun 28 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
vue实现前进刷新后退不刷新效果
Jan 26 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
Aug 15 Javascript
原生JavaScript实现的无缝滚动功能详解
Jan 17 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
js正则表达式验证邮件地址
Nov 12 #Javascript
每天一篇javascript学习小结(Boolean对象)
Nov 12 #Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 #Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 #Javascript
js图片轮播效果实现代码
Apr 18 #Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 #Javascript
javascript发送短信验证码实现代码
Nov 12 #Javascript
You might like
PHP之uniqid()函数用法
2014/11/03 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
python基础教程之类class定义使用方法
2014/02/20 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
PyCharm代码格式调整方法
2018/05/23 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python用for循环求和的方法总结
2019/07/08 Python
Python秒算24点实现及原理详解
2019/07/29 Python
Python输出指定字符串的方法
2020/02/06 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
环保倡议书
2014/04/14 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
护理目标管理责任书
2014/07/25 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
地道战观后感300字
2015/06/04 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
详解Redis复制原理
2021/06/04 Redis
Python的这些库,你知道多少?
2021/06/09 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技