JavaScript生成指定范围随机数的方法与技巧
本文详细介绍JavaScript中Math.random()生成随机数的原理,以及如何利用parseInt、Math.floor和Math.ceil实现指定范围(如0到max或min到max)的随机整数生成。此外,还汇总了基于时间的随机数生成方法及两种高级随机数发生器代码实例,帮助开发者灵活掌握JS随机数应用。
JavaScript生成指定范围随机数的方法与技巧
近日有开发者询问如何在 JavaScript 中生成指定范围内的随机数值。众所周知,Math.random() 是用于生成随机数的内置方法,但多数参考手册并未详细说明如何将其限制在特定区间。本文将深入解析 Math.random() 的基本用法,并重点介绍如何生成符合指定范围要求的随机数。
基础教程请看这里
https://www.jb51.net/w3school/js/jsref_random.htm
阅读完上述教程后,您应当已掌握 Math.random() 方法的基础使用方式。
利用取整函数处理随机数
利用 parseInt()、Math.floor() 或者 Math.ceil()进行四舍五入处理
直接调用 Math.random() 会返回一个大于等于 0 且小于 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)的随机数,可使用以下公式:
// max - 期望的最大值
parseInt(Math.random()*max,10)+1;
Math.floor(Math.random()*max)+1;
Math.ceil(Math.random()*max);
若需生成 0 到任意最大值(max)的随机数,可使用以下公式:
// max - 期望的最大值
parseInt(Math.random()*(max+1),10);
Math.floor(Math.random()*(max+1));
若需生成任意最小值(min)到最大值(max)之间的随机数,可使用以下公式:
// 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 生成随机数的方法有了更深入的理解,希望本文能为您提供有益参考。
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
