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 相关文章推荐
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
纯jquery实现模仿淘宝购物车结算
Aug 20 Javascript
javascript基础知识分享之类与函数化
Feb 13 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
Vue监听数据对象变化源码
Mar 09 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
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程序的方法
2009/03/09 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP静态成员变量
2017/02/14 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python 中 Meta Classes详解
2016/02/13 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Flask-Mail用法实例分析
2018/07/21 Python
django基于restframework的CBV封装详解
2019/08/08 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
Python中的全局变量如何理解
2020/06/04 Python
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
应聘美工求职信
2013/11/07 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript