【早見表】JavaScript でよく使う Math メソッドの一覧と活用事例

Web 開発において数値計算は欠かせない処理です。しかし、JavaScript の Math オブジェクトには数多くのメソッドがあり、どれを使えばよいか迷うことがありませんか。
本記事では、JavaScript の Math メソッドを体系的に整理し、実際の開発現場でよく使われるメソッドを早見表形式でご紹介します。各メソッドの使い方から実用的なコード例まで、すぐに実践で活用できる形でお届けいたします。
背景
JavaScript における数値計算の重要性
現代の Web 開発では、単純な表示だけでなく、リアルタイムな計算処理が求められる場面が増えています。
EC サイトでの価格計算、ゲーム開発での座標計算、データビジュアライゼーションでの統計処理など、あらゆる場面で正確な数値計算が必要です。特に、ユーザーエクスペリエンスを向上させるためには、高速かつ正確な計算処理が不可欠になっています。
以下の図は、Web アプリケーションにおける数値計算の活用範囲を示しています。
mermaidflowchart TD
webapp[Web アプリケーション] --> ui[UI/UX 処理]
webapp --> business[ビジネスロジック]
webapp --> visual[データビジュアライゼーション]
ui --> animation[アニメーション計算]
ui --> layout[レイアウト計算]
business --> price[価格計算]
business --> tax[税率計算]
visual --> chart[グラフ描画]
visual --> statistics[統計処理]
このように、Web アプリケーションのあらゆる場面で数値計算が活用されており、Math オブジェクトの重要性がますます高まっています。
Math オブジェクトの役割
JavaScript の Math オブジェクトは、数学的な計算を行うためのメソッドと定数を提供する組み込みオブジェクトです。
Math オブジェクトの特徴として、コンストラクタを持たない静的オブジェクトであることが挙げられます。つまり、new 演算子を使って インスタンスを作成する必要がなく、直接 Math.メソッド名() の形で使用できます。
また、Math オブジェクトは IEEE 754 標準に準拠した計算を行うため、クロスプラットフォームで一貫した結果を得られるのも大きなメリットです。
課題
手動計算の限界
JavaScript の基本的な演算子(+、-、*、/)だけでは、複雑な数学的計算に限界があります。
例えば、平方根の計算や三角関数の計算、乱数の生成などは、基本演算子だけでは実現が困難です。手動でこれらの計算を実装しようとすると、コードが複雑になり、エラーが発生しやすくなってしまいます。
javascript// 手動で平方根を計算しようとする場合(非効率的)
function manualSqrt(number) {
let guess = number / 2;
let previousGuess;
do {
previousGuess = guess;
guess = (guess + number / guess) / 2;
} while (Math.abs(guess - previousGuess) > 0.0001);
return guess;
}
上記のように、手動実装は複雑で非効率的になってしまいます。
メソッド選択の迷い
Math オブジェクトには 40 以上のメソッドと定数が用意されています。
豊富な選択肢がある反面、似たような処理を行うメソッドが複数存在するため、どれを選べばよいか迷うことがよくあります。例えば、小数点以下の処理だけでも Math.round()、Math.floor()、Math.ceil()、Math.trunc() など複数の選択肢があります。
mermaidflowchart LR
decimal[小数点処理] --> round[Math.round 四捨五入]
decimal --> floor[Math.floor 切り下げ]
decimal --> ceil[Math.ceil 切り上げ]
decimal --> trunc[Math.trunc 小数点削除]
適切でないメソッドを選択すると、期待した結果が得られないだけでなく、パフォーマンスの低下にもつながる可能性があります。
解決策
Math メソッドの分類と整理
Math メソッドを用途別に分類することで、目的に応じた適切なメソッド選択が可能になります。
以下のような分類で整理すると理解しやすくなります。
分類 | 主要メソッド | 用途 |
---|---|---|
基本計算 | abs, round, floor, ceil | 数値の基本的な変換・調整 |
比較・選択 | max, min | 複数値からの最大・最小選択 |
べき乗・ルート | pow, sqrt, cbrt | 累乗・平方根・立方根計算 |
三角関数 | sin, cos, tan | 角度・座標計算 |
乱数 | random | ランダム値生成 |
定数 | PI, E | 数学定数の利用 |
この分類により、開発者は目的に応じて迅速に適切なメソッドを選択できるようになります。
用途別選択指針
実際の開発現場では、以下の指針に従ってメソッドを選択することが効果的です。
データ処理の場合
- 統計計算:Math.max()、Math.min()
- 金額処理:Math.round()、Math.floor()
UI・アニメーションの場合
- 座標計算:Math.sin()、Math.cos()
- イージング:Math.pow()
ゲーム開発の場合
- 乱数生成:Math.random()
- 距離計算:Math.sqrt()、Math.pow()
このような用途別の指針により、開発効率を大幅に向上させることができます。
具体例
基本的な計算メソッド
Math.abs()、Math.round()、Math.floor()、Math.ceil()
基本的な計算メソッドは、数値の変換や調整において最も頻繁に使用されるメソッドです。
これらのメソッドは、ユーザー入力の正規化、UI での表示調整、データ処理での値の丸め処理など、様々な場面で活用されます。
以下の図は、これらのメソッドの動作を視覚的に表したものです。
mermaidflowchart TD
input[入力値: -3.7] --> abs[Math.abs]
abs --> absResult[3.7]
input2[入力値: 3.7] --> round[Math.round]
round --> roundResult[4]
input3[入力値: 3.7] --> floor[Math.floor]
floor --> floorResult[3]
input4[入力値: 3.2] --> ceil[Math.ceil]
ceil --> ceilResult[4]
早見表と実装例
メソッド | 機能 | 例 | 結果 | 用途 |
---|---|---|---|---|
Math.abs() | 絶対値を返す | Math.abs(-5) | 5 | 距離計算、エラー値処理 |
Math.round() | 四捨五入 | Math.round(4.7) | 5 | 通常の丸め処理 |
Math.floor() | 切り下げ | Math.floor(4.7) | 4 | インデックス計算 |
Math.ceil() | 切り上げ | Math.ceil(4.2) | 5 | ページ数計算 |
実装例:ショッピングカートの税込価格計算
javascript// 商品価格に消費税を加算して、適切に丸める処理
function calculateTaxIncludedPrice(
basePrice,
taxRate = 0.1
) {
// 税額を計算(小数点以下が発生する可能性)
const tax = basePrice * taxRate;
// 税込価格を計算
const taxIncludedPrice = basePrice + tax;
// 通常は四捨五入で処理
return Math.round(taxIncludedPrice);
}
実装例:配列のページング処理
javascript// 配列データをページごとに分割する際の計算
function calculatePagination(totalItems, itemsPerPage) {
// 総ページ数は切り上げで計算(余りがあれば1ページ追加)
const totalPages = Math.ceil(totalItems / itemsPerPage);
// 現在ページの開始インデックスは切り下げで計算
const getStartIndex = (currentPage) => {
return Math.floor((currentPage - 1) * itemsPerPage);
};
return { totalPages, getStartIndex };
}
比較・最大最小メソッド
Math.max()、Math.min()
Math.max() と Math.min() は、複数の数値から最大値・最小値を効率的に取得するメソッドです。
配列処理、データ分析、バリデーション処理など、値の範囲を制限したり比較したりする場面で重宝します。特に、ES6 のスプレッド演算子と組み合わせることで、配列からの最大・最小値取得が簡潔に記述できます。
早見表と実装例
メソッド | 機能 | 例 | 結果 | 用途 |
---|---|---|---|---|
Math.max() | 最大値を返す | Math.max(1, 3, 2) | 3 | 上限値の決定 |
Math.min() | 最小値を返す | Math.min(1, 3, 2) | 1 | 下限値の決定 |
Math.max(...array) | 配列の最大値 | Math.max(...[1,2,3]) | 3 | 配列処理 |
Math.min(...array) | 配列の最小値 | Math.min(...[1,2,3]) | 1 | 配列処理 |
実装例:レスポンシブデザインでの画像サイズ調整
javascript// 画面サイズに応じた最適な画像サイズを計算
function calculateOptimalImageSize(
containerWidth,
containerHeight
) {
// 最大サイズを制限(1200px)
const maxWidth = Math.min(containerWidth, 1200);
const maxHeight = Math.min(containerHeight, 800);
// 最小サイズを保証(300px)
const finalWidth = Math.max(maxWidth, 300);
const finalHeight = Math.max(maxHeight, 200);
return { width: finalWidth, height: finalHeight };
}
実装例:成績評価システムでの統計計算
javascript// 学生の成績から統計情報を計算
function calculateGradeStatistics(scores) {
if (scores.length === 0) return null;
// 最高点と最低点を取得
const highest = Math.max(...scores);
const lowest = Math.min(...scores);
// 平均点を計算
const average =
scores.reduce((sum, score) => sum + score, 0) /
scores.length;
return {
highest: highest,
lowest: lowest,
average: Math.round(average * 100) / 100, // 小数点2桁で四捨五入
range: highest - lowest,
};
}
べき乗・ルートメソッド
Math.pow()、Math.sqrt()、Math.cbrt()
べき乗とルート計算は、物理計算、金融計算、グラフィック処理において重要な役割を果たします。
Math.pow() は累乗計算、Math.sqrt() は平方根、Math.cbrt() は立方根を効率的に計算できるメソッドです。これらのメソッドは、ES2016 で導入されたべき乗演算子(**)と併用することで、より読みやすいコードを書けます。
早見表と実装例
メソッド | 機能 | 例 | 結果 | 用途 |
---|---|---|---|---|
Math.pow(x, y) | x の y 乗 | Math.pow(2, 3) | 8 | 累乗計算 |
Math.sqrt(x) | x の平方根 | Math.sqrt(9) | 3 | 距離計算 |
Math.cbrt(x) | x の立方根 | Math.cbrt(8) | 2 | 体積計算 |
x ** y | x の y 乗(ES2016) | 2 ** 3 | 8 | 累乗計算 |
実装例:複利計算システム
javascript// 投資の複利計算を行う関数
function calculateCompoundInterest(
principal,
annualRate,
compoundTimes,
years
) {
// 複利の公式: A = P(1 + r/n)^(nt)
const rate = annualRate / 100; // パーセントを小数に変換
const exponent = compoundTimes * years;
const base = 1 + rate / compoundTimes;
// Math.pow() を使用した複利計算
const finalAmount = principal * Math.pow(base, exponent);
return {
principal: principal,
finalAmount: Math.round(finalAmount),
profit: Math.round(finalAmount - principal),
};
}
実装例:2 点間の距離計算(ピタゴラスの定理)
javascript// 2つの座標間の距離を計算する関数
function calculateDistance(point1, point2) {
// ピタゴラスの定理: √((x2-x1)² + (y2-y1)²)
const deltaX = point2.x - point1.x;
const deltaY = point2.y - point1.y;
// べき乗と平方根を組み合わせて計算
const distanceSquared =
Math.pow(deltaX, 2) + Math.pow(deltaY, 2);
const distance = Math.sqrt(distanceSquared);
return Math.round(distance * 100) / 100; // 小数点2桁で四捨五入
}
三角関数メソッド
Math.sin()、Math.cos()、Math.tan()
三角関数は、アニメーション、ゲーム開発、データビジュアライゼーションで欠かせない計算です。
JavaScript の三角関数は、角度の単位にラジアンを使用することに注意が必要です。度からラジアンへの変換には、Math.PI を使用した計算が必要になります。
以下の図は、三角関数の関係性を示しています。
mermaidflowchart LR
angle[角度] --> degree[度 °]
angle --> radian[ラジアン]
degree -->|"× π/180"| radian
radian --> sin[Math.sin]
radian --> cos[Math.cos]
radian --> tan[Math.tan]
sin --> sinValue[正弦値]
cos --> cosValue[余弦値]
tan --> tanValue[正接値]
早見表と実装例
メソッド | 機能 | 角度(度) | ラジアン | 結果 | 用途 |
---|---|---|---|---|---|
Math.sin() | 正弦 | 90° | Math.PI/2 | 1 | Y 座標計算 |
Math.cos() | 余弦 | 0° | 0 | 1 | X 座標計算 |
Math.tan() | 正接 | 45° | Math.PI/4 | 1 | 傾き計算 |
実装例:円運動アニメーション
javascript// 円形軌道でのアニメーション座標計算
function createCircularMotion(
centerX,
centerY,
radius,
angleInDegrees
) {
// 度からラジアンに変換
const angleInRadians = (angleInDegrees * Math.PI) / 180;
// 円運動の座標計算
const x = centerX + radius * Math.cos(angleInRadians);
const y = centerY + radius * Math.sin(angleInRadians);
return { x: Math.round(x), y: Math.round(y) };
}
// 使用例:時計の針の座標計算
function calculateClockHandPosition(hours, minutes) {
const hourAngle = (hours % 12) * 30 - 90; // 12時を0度とする
const minuteAngle = minutes * 6 - 90; // 12時を0度とする
return {
hour: createCircularMotion(150, 150, 80, hourAngle),
minute: createCircularMotion(
150,
150,
120,
minuteAngle
),
};
}
実装例:波状アニメーション
javascript// サイン波を使ったスムーズなアニメーション効果
function createWaveAnimation(
time,
amplitude = 50,
frequency = 1,
phase = 0
) {
// サイン波による上下運動の計算
const angle =
((time * frequency + phase) * Math.PI) / 180;
const offset = amplitude * Math.sin(angle);
return Math.round(offset);
}
// 複数の要素を異なる位相で動かす
function animateMultipleElements(elements, time) {
elements.forEach((element, index) => {
const phase = index * 45; // 各要素を45度ずつずらす
const yOffset = createWaveAnimation(time, 30, 2, phase);
element.style.transform = `translateY(${yOffset}px)`;
});
}
乱数・確率メソッド
Math.random()の活用パターン
Math.random() は 0 以上 1 未満の浮動小数点数を返すメソッドです。
ゲーム開発、データテスト、UI エフェクトなど、ランダム性が必要な場面で広く活用されています。基本的な Math.random() を応用することで、様々な範囲の整数や浮動小数点数を生成できます。
早見表と実装例
パターン | 数式 | 例 | 結果範囲 | 用途 |
---|---|---|---|---|
基本 | Math.random() | Math.random() | 0 ~ 0.999... | 確率判定 |
整数 | Math.floor(Math.random() * n) | Math.floor(Math.random() * 6) | 0 ~ 5 | サイコロ |
範囲指定 | Math.random() * (max - min) + min | Math.random() * 50 + 10 | 10 ~ 59.999... | 位置決定 |
範囲整数 | Math.floor(Math.random() * (max - min + 1)) + min | Math.floor(Math.random() * 3) + 1 | 1 ~ 3 | 選択肢 |
実装例:ゲーム要素のランダム生成
javascript// サイコロの出目をシミュレート(1-6)
function rollDice() {
return Math.floor(Math.random() * 6) + 1;
}
// ランダムな色を生成
function generateRandomColor() {
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
return `rgb(${r}, ${g}, ${b})`;
}
// 配列からランダムに要素を選択
function getRandomElement(array) {
const randomIndex = Math.floor(
Math.random() * array.length
);
return array[randomIndex];
}
実装例:データテスト用のモックデータ生成
javascript// テスト用のユーザーデータを生成
function generateMockUser() {
const firstNames = [
'太郎',
'花子',
'次郎',
'美咲',
'健太',
];
const lastNames = [
'田中',
'佐藤',
'鈴木',
'高橋',
'中村',
];
return {
id: Math.floor(Math.random() * 10000) + 1,
name:
getRandomElement(lastNames) +
getRandomElement(firstNames),
age: Math.floor(Math.random() * 50) + 20, // 20-69歳
score: Math.floor(Math.random() * 101), // 0-100点
active: Math.random() > 0.3, // 70%の確率でアクティブ
};
}
// 指定数のモックデータを生成
function generateMockData(count) {
return Array.from({ length: count }, () =>
generateMockUser()
);
}
その他の便利メソッド
Math.PI、Math.E などの定数
Math オブジェクトには、数学計算でよく使用される定数が定義されています。
これらの定数は、手動で値を記述するよりも正確で、コードの意図も明確に表現できるメリットがあります。特に、円周率や自然対数の底は、幾何学的計算や指数計算で頻繁に使用されます。
早見表と実装例
定数 | 値(近似) | 数学的意味 | 用途 |
---|---|---|---|
Math.PI | 3.14159... | 円周率 π | 円・角度計算 |
Math.E | 2.71828... | 自然対数の底 e | 指数・対数計算 |
Math.LN2 | 0.69314... | 2 の自然対数 | 対数計算 |
Math.LN10 | 2.30258... | 10 の自然対数 | 対数計算 |
Math.SQRT2 | 1.41421... | 2 の平方根 | 幾何学計算 |
実装例:円の面積と円周の計算
javascript// 円の基本的な計算を行う関数群
const CircleCalculator = {
// 円の面積を計算(πr²)
calculateArea(radius) {
return Math.PI * Math.pow(radius, 2);
},
// 円の円周を計算(2πr)
calculateCircumference(radius) {
return 2 * Math.PI * radius;
},
// 半径から直径を計算
calculateDiameter(radius) {
return 2 * radius;
},
// すべての値をまとめて計算
calculateAll(radius) {
return {
radius: radius,
diameter: this.calculateDiameter(radius),
area:
Math.round(this.calculateArea(radius) * 100) / 100,
circumference:
Math.round(
this.calculateCircumference(radius) * 100
) / 100,
};
},
};
実装例:指数関数を使った成長率計算
javascript// 指数的成長・減衰を計算する関数
function calculateExponentialGrowth(initial, rate, time) {
// 指数的成長の公式: N(t) = N₀ × e^(rt)
// Math.E を使用して自然対数の底を表現
const result = initial * Math.pow(Math.E, rate * time);
return Math.round(result * 100) / 100;
}
// ユーザー数の成長予測
function predictUserGrowth(
currentUsers,
monthlyGrowthRate,
months
) {
// 月次成長率を自然対数ベースに変換
const naturalRate = Math.log(1 + monthlyGrowthRate / 100);
return calculateExponentialGrowth(
currentUsers,
naturalRate,
months
);
}
実装例:角度の単位変換
javascript// 角度の単位変換を行う utility 関数群
const AngleConverter = {
// 度からラジアンに変換
degreesToRadians(degrees) {
return (degrees * Math.PI) / 180;
},
// ラジアンから度に変換
radiansToDegrees(radians) {
return (radians * 180) / Math.PI;
},
// 角度を正規化(0-360度の範囲に収める)
normalizeDegrees(degrees) {
while (degrees < 0) degrees += 360;
while (degrees >= 360) degrees -= 360;
return degrees;
},
};
まとめ
JavaScript の Math オブジェクトは、Web 開発における数値計算の強力なツールです。
本記事で紹介した Math メソッドを適切に活用することで、複雑な計算処理を効率的に実装できます。特に、用途別の分類と早見表を参考にすることで、開発現場での迷いを減らし、生産性を向上させることが可能です。
重要なポイントをまとめると以下のようになります。
- 基本計算メソッド は数値の変換・調整で日常的に使用
- 比較メソッド はデータ処理や UI 制御で重宝
- べき乗・ルートメソッド は物理計算や金融計算に必須
- 三角関数 はアニメーションやゲーム開発で活躍
- 乱数生成 はテストデータ作成や確率処理で重要
- 数学定数 は正確な計算と可読性の向上に寄与
これらの知識を実際のプロジェクトで活用し、より高度で効率的な Web アプリケーション開発を実現していきましょう。Math オブジェクトをマスターすることで、JavaScript でのプログラミングスキルが大きく向上することでしょう。
関連リンク
- article
【早見表】JavaScript でよく使う Math メソッドの一覧と活用事例
- article
JavaScript のオブジェクト操作まとめ:Object.keys/entries/values の使い方
- article
【実践編】JavaScript の正規表現活用術:効率的に文字列を処理する方法
- article
JavaScript の this キーワードを完全理解!初心者がつまずくポイント解説
- article
【徹底比較】JavaScript での null と undefined の違いと正しい使い分け
- article
JavaScript のクロージャ完全ガイド:スコープとメモリの仕組みを深掘り
- article
Prisma の公式ドキュメントを使い倒すためのコツ
- article
GitHub Actions × Node.js:テストとデプロイを自動化する
- article
Pinia × TypeScript:型安全なストア設計入門
- article
Obsidian デイリーノート活用術:毎日の思考ログを資産に変える方法
- article
Git で特定のコミットを打ち消す!git revert の正しい使い方
- article
Gemini CLI のストリーミング出力:逐次生成を活かした UX 改善手法
- blog
iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
- blog
Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
- blog
【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
- blog
Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
- blog
Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
- blog
フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来