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 相关文章推荐
客户端脚本中常常出现的一些问题和调试技巧
Jan 09 Javascript
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
详解angular路由高亮之RouterLinkActive
Apr 28 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
JavaScript实现简单随机点名器
Nov 21 Javascript
JS实现按比例缩小图片宽高
Aug 24 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js中的json对象详细介绍
2014/10/29 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
使用Python读取大文件的方法
2018/02/11 Python
实现Python与STM32通信方式
2019/12/18 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
运动会广播稿100字
2014/01/11 职场文书
学期自我评价
2014/01/27 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
大学校务公开实施方案
2014/03/31 职场文书
小学语文教研活动总结
2014/07/01 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
民事起诉书范本
2015/05/19 职场文书
python3 字符串str和bytes相互转换
2022/03/23 Python