首頁 >web前端 >js教程 >javascript產生隨機數方法總結_javascript技巧

javascript產生隨機數方法總結_javascript技巧

WBOY
WBOY原創
2016-05-16 15:32:341499瀏覽

今天有又網友問到我 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()C; //這將產生一個基於目前時間的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) &#63; 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產生隨機數有了相應的了解,希望本文能給大家一些啟發。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn