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 前的按键判断代码
Mar 19 Javascript
jquery uaMatch源代码
Feb 14 Javascript
仿新浪微博登陆邮箱提示效果的js代码
Aug 02 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
vue源码学习之Object.defineProperty 对数组监听
May 30 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
Mar 20 Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
vue css 相对路径导入问题级踩坑记录
Jun 05 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中的替代语法简介
2014/08/22 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python 调用c语言函数的方法
2017/09/29 Python
对Python3中的input函数详解
2018/04/22 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python 常用的基础函数
2018/07/10 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
Python字典实现伪切片功能
2020/10/28 Python
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
介绍一下linux文件系统分配策略
2013/02/25 面试题
家庭贫困证明书(3篇)
2014/09/15 职场文书
2016银行求职自荐信
2016/01/28 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers