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 相关文章推荐
ECMAScript 基础知识
Jun 29 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
使用jQuery调用XML实现无刷新即时聊天
Aug 07 Javascript
详解express与koa中间件模式对比
Aug 07 Javascript
js实现扫雷小程序的示例代码
Sep 27 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
elementUI select组件使用及注意事项详解
May 29 Javascript
vue页面引入three.js实现3d动画场景操作
Aug 10 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的加密方式及原理
2012/06/14 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
详解vue 组件
2020/06/11 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
Python实现提取文章摘要的方法
2015/04/21 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
用Python实现数据的透视表的方法
2018/11/16 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
详解Python中的文件操作
2021/01/14 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
文秘求职信范文
2014/04/10 职场文书
安全先进个人材料
2014/12/29 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
新闻通讯稿范文
2015/07/22 职场文书
小学六年级毕业感言
2015/07/30 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL