JavaScript入門 Mathオブジェクト

最終更新日

アプリケーション開発で一般的に必要になる数学的な関数、JavaScript組込みのMathオブジェクトについて解説しています。(数値のフォーマット指定、固定小数点、指数表現、精度の指定、基数の指定、定数、代数関連の関数、対数関連の関数、疑似乱数発生、三角関数、双曲線関数)

JavaScriptには整数専用の型はなく、数値はすべてIEEE754の64ビット長の浮動小数点数として表されます。このためMathのほとんどの関数に関しては、すべて小数として表現されます。また、JavaScriptでは複素数はサポートされていません。

数値のフォーマット指定

数値を表す形式を指定したい場合があります。たとえば、2.0093ではなく2.01と表示したり、1949032ではなく、1,949,032と表示したい場合です。フォーマット指定のためのJavaScript組込みの機能は限られていますが、固定桁数の10進数、精度の指定、指数表現などには対応しています。また、2進数、8進数、16進数といった基数の異なる数の表示にも対応しています。数のフォーマットのメソッドはすべて、数値ではなく文字列を返します。

固定小数点数

小数点以下の桁数を指定したい場合は、「Number.prototype.toFixed」を使うことができます。

const x = 19.51;
console.log( x.toFixed(3) );
>19.510
console.log( x.toFixed(2) );
>19.51
console.log( x.toFixed(1) );
>19.5
console.log( x.toFixed(0) );
>20
出力した桁数に四捨五入されます。

指数表現

数を指数表現で表示したい場合は、「Number.prototype.toExponential」を使います。

const x = 3800.5;
console.log( x.toExponential(4) );
>3.800.5e+3
console.log( x.toExponential(3) );
>3.801e+3
console.log( x.toExponential(2) );
>3.80e+3
console.log( x.toExponential(1) );
>3.8e+3
console.log( x.toExponential(0) );
>4e+3
出力した桁数に四捨五入されます。指定する精度は小数点以下の桁数です

精度の指定

全体の桁数を指定した場合は、「Number.prototype.toPrecision」が使えます(少数の位置がどこにあtっても)。

const x = 1000;
console.log( x.toPrecision(5) );
>1000.0
console.log( x.toPrecision(4) );
>1000
console.log( x.toPrecision(3) );
>1.00e+3
console.log( x.toPrecision(2) );
>1.0e+3
console.log( x.toPrecision(1) );
>1e+3
x = 15.335;

console.log( x.toPrecision(6) );
>15.33350
console.log( x.toPrecision(5) );
>15.335
console.log( x.toPrecision(4) );
>15.34
console.log( x.toPrecision(3) );
>15.3
console.log( x.toPrecision(2) );
>15
console.log( x.toPrecision(1) );
>2e+1
出力は四捨五入され常に指定した桁数の精度になります。また、必要に応じて指数表現になります。

基数の指定

数値の基数(2進数、8進数、16進数など)を指定して表示したい場合には、「Number.prototype.toString」の引数に指定します(2から36の範囲)。

const x = 12;
console.log( x.toString() );
>12
console.log( x.toString(10) );  //10進数
>12
console.log( x.toString(16) );  //16進数
>c
console.log( x.toString(8) );   //8進数
>14
console.log( x.toString(2) );   //2進数
>1100

定数

よく使われる重要な定数については、Mathオブジェクトのプロパティが利用できます。

基本的な定数

Math.E自然対数の底 ≒ 2.718
Math.PI円の円長の直径に対する比率(円周率)≒3.142

対数関連の定数

Math.LN22の自然対数 ≒ 0.693
Math.LN1010の自然対数 ≒ 2.303
Math.LOG2E2を底とするMath.Eの対数 ≒ 1.443
Math.LOG10E10を底とするMath.Eの対数 ≒ 0.434

代数関連の定数

Math.SQRT1_21/2の平方根 ≒ 0.707
Math.SQRT22の平方根 ≒ 1.414

代数関連の関数

累乗

基本的な累乗の関数はMath.powですが、次に示すように平方根、立方根、eの累乗などの関数が用意されています。

Math.pow( x , y )基数をべき乗した値を返します。
Math.pow(2,3) = 8
Math.pow(1.7,2.3) ≒ 3.39
Math.sqrt(x)ある数の平方根を返します。
Math.sqrt(16) = 4
Math.sqrt(15.5) ≒ 3.94
Math.cbrt(x)xの立方根を返します。
Math.cbrt(27) = 3
Math.cbrt(22) ≒ 2.8
Math.exp(x)e のある数値のべき乗を返します。
Math.exp(1) ≒ 2.718
Math.exp(5.5) ≒ 244.7
Math.expml(x)e のある数値のべき乗から 1 を引いた値を返します。
Math.expml(1) ≒ 1.718
Math.expml(5.5) ≒ 243.7
Math.hypot(x1, x2, …)引数の2乗の和の平方根
Math.hypot(3,4) = 5
Math.hypot(2.3.4)=5.39

対数関連の関数

基本的な自然対数の関数はMath.logです。言語によっては「log」が「10を底とする対数」、「ln」が「自然対数」を示すこともありますが、JavaScriptでは「log」は「自然対数」を指します。利便性向上のためにES2015ではMath.log10が導入されました。

Math.log(x)xの自然対数
Math.log(Math.E) = 1
Math.log(17.5) ≒ 2.86
Math.log10(x)10を底とするxの対数
Math.log10(10) = 1
Math.log10(16.7) = 1.22
Math.log2(x)2を底とするxの対数
Math.log2(2) = 1
Math.log2(5) ≒ 2.32
Math.loglp(x)1+xの自然対数
Math.loglp( Math.E – 1 ) = 1
Math.loglp( 17.5 ) ≒ 2.92

その他の関数

次にあげるのは一般的な数値演算を行う様々な関数です。絶対値や上限値、下限値、数の符号、指定した引数のうちの最大値・最小値の取得などができます。

Math.abs(x)xの絶対値
Math.abs(-5.5) = 5.5
Math.abs(5.5) = 5.5
Math.sign(x)xの符号。xが負なら-1、xが正なら1、xが0なら0
Math.sign(-10.5) = -1
Math.sign(6.77) = 1
Math.ceil(x)xの上限値。xより大きいか等しい最小の整数値
Math.ceil(2.2) = 3
Math.ceil(-3.8) = -3
Math.floor(x)xの下限値。xより小さいか等しい最大の整数値
Math.floor(2.8) = 2
Math.floor(-3.2) = -4
Math.trunc(x)xの整数部分(少数部分はすべて切り捨て)
Math.trunc(7.7) = -7
Math.trunc(-5.8) = -5
Math.round(x)xをもっとも近い整数に四捨五入
Math.round(7.2) = 7
Math.round(7.7) = 8
Math.round(-7.7) = -8
Math.round(-7.2) = -7
Math.min(x1,x2,…)最小の引数を返す
Math.min(1, 2) = 1
Math.min(3, 0.5, 0.66) = 0.5
Math.min(3,0.5, -0.66) = -0.66
Math.max(x1,x2,…)最大の引数を返す
Math.min(1, 2) = 2
Math.min(3, 0.5, 0.66) = 3
Math.min(-3,0.5, -0.66) = 0.5

疑似乱数発生

Math.randomは疑似乱数を生成し、0以上1未満の疑似乱数を返します。Math.randomは別の範囲の疑似乱数を生成するためのメソッドは提供していません。ほかの範囲の数を取得するための方法を次に示します。xとyは実数を、mとnは整数を表します。

  • [0,1) :Math.random()
  • [x,y) :x + (y-x)*Math.random()
  • [m,n)の整数 :m + Math.floor( (n-m)*Math.random() )
  • [m,n)の整数 :m + Math.floor( (n-m+1)*Math.random() )

三角関数

サイン、コサイン、タンジェント、そしてその逆関数がすべて用意されています。Mathのライブラリの三角関数には「度」ではなく「ラジアン」を指定します。

Math.sin(x)xラジアンのサイン
Math.sin(Math.PI/2) = 1
Math.sin(Math.PI/4) ≒ 0.707
Math.cos(x)xラジアンのコサイン
Math.cos(Math.PI) = -1
Math.cos(Math.PI/4) ≒ 0.707
Math.tan(x)xラジアンのタンジェント
Math.tan(Math.PI/4) ≒ 1
Math.tan(0) = 0
Math.asin(x)xのアークサイン
Math.asin(0) = 0
Math.asin(Math.SQRT1_2) ≒ 0.785
Math.acos(x)xのアークコサイン
Math.acos(0) ≒ 1.57
Math.acos(Math.SQRT1_2) ≒ 0.785
Math.atan(x)xのアークタンジェント
Math.atan(0) = 0
Math.atan(Math.SQRT1_2) ≒ 0.615
Math.atan2(y, x0)x軸から座標(x,y)までの反時計回りの角度(ラジアン)
Math.atan2(0, 1) = 0
Math.atan2(1, 1) ≒ 0.785

度を用いている場合は、ラジアンに変換する必要があります。計算は単純で、180で割りπを掛けます。度からラジアンに変換する関数とラジアンから度へ変換する関数を次に示します。

function deg2rad(d) { return d/180*Math.PI; }
function deg2rad(r) { return r/Math.PI*180; }

双曲線関数

Math.sinh(x)xの双曲線正弦
Math.sinh(0) = 0
Math.sinh(1) = 1.18
Math.cosh(x)xの双曲線余弦
Math.cosh(0) = 1
Math.cosh(1) = 1.54
Math.tanh(x)xの双曲線正接
Math.tanh(0) = 0
Math.tanh(1) ≒ 0.762
Math.asinh(x)xの逆双曲線正弦(arcsinh)
Math.asinh(0) = 0
Math.asinh(1) ≒ 0.881
Math.acosh(x)xの逆双曲線余弦(arccosh)
Math.acosh(0) = Nan
Math.acosh(1) = 0
Math.atanh(x)xの逆双曲線正接(arctanh)
Math.atanh(0) = 0
Math.atanh(1) = Infinity