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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
JS继承之借用构造函数继承和组合继承
Sep 07 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
Vue如何实现响应式系统
Jul 11 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
浅谈javascript错误处理
Aug 11 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
js实现跳一跳小游戏
Jul 31 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函数
2006/10/09 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
配置nodejs环境的方法
2017/05/13 NodeJs
优雅地使用loading(推荐)
2019/04/20 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python写一个md5解密器示例
2018/02/23 Python
Python切片操作实例分析
2018/03/16 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
详解python 注释、变量、类型
2018/08/10 Python
Django中的forms组件实例详解
2018/11/08 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
int和Integer有什么区别
2013/05/25 面试题
小学教研工作制度
2014/01/15 职场文书
高中生职业规划范文
2014/03/09 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
思想品德评语大全
2014/12/31 职场文书
节水倡议书
2015/01/19 职场文书
车位出租协议书范本
2016/03/19 职场文书