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 相关文章推荐
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
javasctipt如何显示几分钟前、几天前等
Apr 30 Javascript
轻松搞定jQuery.noConflict()
Feb 15 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
Vue动态加载异步组件的方法
Nov 21 Javascript
layui树形菜单动态遍历的例子
Sep 23 Javascript
微信小程序分包加载代码实现方法详解
Sep 23 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采集速度探究总结(原创)
2008/04/18 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
关于php中一些字符串总结
2016/05/05 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
form表单action提交的js部分与html部分
2014/01/07 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
微信小程序实时聊天WebSocket
2018/07/05 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
python实现自动发送报警监控邮件
2018/06/21 Python
python画折线图的程序
2018/07/26 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
python机器学习实现决策树
2019/11/11 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
详解python变量与数据类型
2020/08/25 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
考博自荐信
2013/10/25 职场文书
公司财务工作总结的自我评价
2013/11/23 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL