JavaScript Primerのスポンサーを募集中

Math

この章では、JavaScriptで数学的な定数と関数を提供するビルトインオブジェクトであるMathについて学びます。

Mathオブジェクト

Mathオブジェクトはビルトインオブジェクトですが、コンストラクタではありません。つまりMathオブジェクトはインスタンスを作らず、すべての定数や関数はMathオブジェクトの静的なプロパティやメソッドとして提供されています。たとえば、Math.PIプロパティは円周率πを表す定数であり、Math.sin静的メソッドはラジアン値から正弦を計算する関数です。次の例では、90度における正弦を計算しています。90度の正弦は1なので、sin90変数は1を返します。

const rad90 =Math.PI *90 /180;const sin90 =Math.sin(rad90);console.log(sin90);// => 1

三角関数をはじめとした多くの関数や定数がMathオブジェクトから提供されています。この章ではそれらのうちよく使われるものについてユースケースを交えて紹介します。網羅的な解説についてはMDNのリファレンスを参照してください。

乱数を生成する

Mathオブジェクトの主な用途のひとつは、Math.randomメソッドによる乱数の生成です。Math.random静的メソッドは、0以上1未満の範囲内で、疑似ランダムな浮動小数点数を返します。

for (let i =0; i <5; i++) {// 毎回ランダムな浮動小数点数を返すconsole.log(Math.random());}

次の例では、Math.random静的メソッドを使って、任意の範囲で乱数を生成しています。

// minからmaxまでの乱数を返す関数functiongetRandom(min, max) {returnMath.random() * (max - min) + min;}// 1以上5未満の浮動小数点数を返すconsole.log(getRandom(1,5));

数値の大小を比較する

Math.maxメソッドは引数として渡された複数の数値のうち、最大のものを返します。同様に、Math.minメソッドは引数として渡された複数の数値のうち、最小のものを返します。

console.log(Math.max(1,10));// => 10console.log(Math.min(1,10));// => 1

これらのメソッドは可変長の引数を取るため、任意の個数の数値を比較できます。数値の配列の中から最大・最小の値を取り出す際には、...(spread構文)を使うと簡潔に記述できます。

const numbers = [1,2,3,4,5];console.log(Math.max(...numbers));// => 5console.log(Math.min(...numbers));// => 1

数値を整数にする

Mathオブジェクトには数値を整数に丸めるためのメソッドがいくつかあります。代表的なものは、小数点以下を切り捨てるMath.floor静的メソッド、小数点以下を切り上げるMath.ceil静的メソッド、そして四捨五入するMath.round静的メソッドです。

Math.floorメソッドは、引数として渡した数以下で最大の整数を返します。このような関数は床関数と呼ばれます。正の数である1.31になりますが、負の数である-1.3はより小さい整数の-2に丸められます。

次のMath.ceilメソッドは、引数として渡した数以上で最小の整数を返します。このような関数は天井関数と呼ばれます。正の数である1.32になりますが、負の数である-1.3はより大きい整数の-1に丸められます。

Math.roundメソッドは、一般的な四捨五入の処理を行います。小数部分が0.5よりも小さな場合は切り捨てられ、それ以外は切り上げられます。

// 床関数console.log(Math.floor(1.3));// => 1console.log(Math.floor(-1.3));// => -2// 天井関数console.log(Math.ceil(1.3));// => 2console.log(Math.ceil(-1.3));// => -1// 四捨五入console.log(Math.round(1.3));// => 1console.log(Math.round(1.6));// => 2console.log(Math.round(-1.3));// => -1

また、Math.truncメソッド[ES2015]は、渡された数字の小数点以下を単純に切り落とした整数を返します。そのため、引数が正の値の場合はMath.floor静的メソッドと同じになり、そうでない場合はMath.ceil静的メソッドと同じになります。

// 単純に小数部分を切り落とすconsole.log(Math.trunc(1.3));// => 1console.log(Math.trunc(-1.3));// => -1

まとめ

この章では、Mathオブジェクトについて学びました。紹介したメソッドはMathオブジェクトの一部にすぎないため、そのほかにもメソッドが用意されています。

  • Mathは数学的な定数や関数を提供するビルトインオブジェクト
  • Mathはコンストラクタではないためインスタンス化できない
  • 疑似乱数の生成、数値の比較、数値の計算などを行うメソッドが提供されている