Math.random()関数は、0–1(0以上、1未満)の範囲で浮動小数点の擬似乱数を返します。その範囲ではほぼ均一な分布で、ユーザーは範囲の拡大をすることができます。実装側で乱数生成アルゴリズムの初期シードを選択し、ユーザーが初期シードを選択、またはリセットすることは出来ません。

Math.random() の提供する乱数は、暗号に使用可能な安全性を備えていません。セキュリティに関連する目的では使用しないでください。代わりに Web Crypto API(より正確にはwindow.crypto.getRandomValues() メソッド)を使用してください。

構文

Math.random()

戻り値

0 以上 1 未満の疑似ランダムな浮動小数点による小数です。

JavaScript における数値は、IEEE 754 浮動小数点での「JIS丸め」 (round-to-nearest-even) をするため、以下の関数の値域が ( Math.random() 自体の値域が正しくても) 厳密ではないことに注意してください。非常に大きい境界値(253 以上)のうち極めて稀な数値で、通常なら返されないはずの上限値が出力されてしまうことがあり得ます。

0 以上 1 未満の乱数を得る

function getRandom() {
  return Math.random();
}

2 つの値の間の乱数を得る

この例は指定した値の間の乱数を返します。戻り値は min 以上、 max 未満です。

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

2 つの値の間のランダムな整数を得る

この例は指定した値の間のランダムな整数を返します。戻り値は min 以上( min が整数でない場合、 min より大きい次の整数以上)、 max 未満です。

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
}

Math.round() を使う方が魅力的かもしれませんが、その場合は乱数が不均一な分布に従うことになるので、ユーザーのニーズに合わないかもしれません。

包括的に 2 つの値の間のランダムな整数を得る

上記の getRandomInt() 関数が返す乱数の範囲は min を含みますが、max は除外されます。 minmax も範囲に含まれた乱数を生成したいなら getRandomIntInclusive() 関数を使うといいでしょう。

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive 
}

仕様

仕様書 策定状況 コメント
ECMAScript 1st Edition (ECMA-262) 標準 初回定義です。JavaScript 1.0 (UNIXのみ)/ JavaScript 1.1 (すべてのプラットフォーム)。
ECMAScript 5.1 (ECMA-262)
Math.random の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
Math.random の定義
標準  
ECMAScript Latest Draft (ECMA-262)
Math.random の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
基本対応Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

 

ドキュメントのタグと貢献者

最終更新者: segayuu,