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

來源:互聯網
上載者:User

今天有又網友問到我 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)); // 2alert(Math.floor(randomNum)); // 2alert(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-10Math.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產生隨機數有了相應的瞭解,希望本文能夠給大家一些啟發。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.