DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> javascript生成隨機數方法匯總
javascript生成隨機數方法匯總
編輯:關於JavaScript     

今天有又網友問到我 JavaScript 怎麼生成指定范圍數值隨機數。Math.random() 這個方法相信大家都知道,是用來生成隨機數的。不過一般的參考手冊時卻沒有說明如何用這個方法來生成指定范圍內的隨機數。這次我就來詳細的介紹一下Math.random(),以及如何用它來生成制定范圍內的隨機數。

基礎教程請看這裡

http://www.jb51.net/w3school/js/jsref_random.htm

看完教程,應該知道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生成隨機數有了相應的了解,希望本文能夠給大家一些啟發。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved