- Math.floorMod()とは何か
- まずは剰余(余り)を理解しよう
- Math.floorMod()の基本構文
- ステップバイステップで理解する
- 通常の%演算子との違いはどこにあるのか
- 負の数の場合を見てみよう
- なぜ結果が違うのか
- 通常の剰余との比較表
- Math.floorDiv()との関係を理解しよう
- 実務でよくある利用例① 曜日計算
- 実務でよくある利用例② 循環インデックス
- 実務でよくある利用例③ グループ分け
- 実務でよくある利用例④ ローテーション処理
- 特に重要:負数インデックス問題を解決できる
- long型にも対応している
- 実務で使えるテンプレート集
- 情報セキュリティの観点から見る重要性
- 初心者が覚えておくべき重要ポイント
- まとめ
Math.floorMod()とは何か
Javaで業務システムを開発していると、「割り算の余り」を求める処理が頻繁に登場します。
例えば、
- ページ送り処理
- 曜日計算
- 循環処理(ループ処理)
- グループ分け
- ハッシュ値計算
- 座標変換処理
などです。
通常であれば、
%Java演算子を利用します。
10 % 3JavaしかしJavaには、
Math.floorMod()Javaという特別な剰余(余り)計算メソッドがあります。
このメソッドは、負の数を含む計算でも数学的に一貫した余りを返します。
特にMath.floorDiv()とセットで利用される重要なユーティリティです。
まずは剰余(余り)を理解しよう
剰余とは割り算したときの余りです。
例えば、
10 ÷ 3 = 3 余り 1
になります。
Javaでは次のように書きます。
// 余り
int result = 10 % 3;
System.out.println(result);
Java実行結果
1
これが剰余です。
Math.floorMod()の基本構文
基本構文は非常にシンプルです。
Math.floorMod(被除数, 除数)Java実際に確認してみましょう。
// 余り計算
int result =
Math.floorMod(
10,
3
);
// 表示
System.out.println(result);
Java実行結果
1
正の数同士なら通常の%演算子と同じ結果になります。
ステップバイステップで理解する
ステップ1:割られる数を用意する
// データ番号
int recordNo = 17;
Javaステップ2:割る数を用意する
// グループサイズ
int groupSize = 5;
Javaステップ3:Math.floorMod()を実行する
// 余り計算
int remain =
Math.floorMod(
recordNo,
groupSize
);
Javaステップ4:結果を確認する
// 出力
System.out.println(remain);
Java実行結果
2
17 ÷ 5 は余り2になります。
通常の%演算子との違いはどこにあるのか
ここが最大のポイントです。
正の数同士では違いがありません。
// 通常
System.out.println(
7 % 3
);
Java結果
1
Math.floorMod()でも同じです。
// floorMod
System.out.println(
Math.floorMod(
7,
3
)
);
Java結果
1
違いが出るのは負の数です。
負の数の場合を見てみよう
通常の%演算子
// 通常剰余
System.out.println(
-7 % 3
);
Java実行結果
-1
Math.floorMod()
// floorMod
System.out.println(
Math.floorMod(
-7,
3
)
);
Java実行結果
2
結果が大きく異なります。
なぜ結果が違うのか
Math.floorMod()は数学的な剰余を求めます。
実は、
-7 = (-3 × 3) + 2
が成立しています。
また、
Math.floorDiv(-7, 3)
Javaの結果は、
-3
です。
そのため、
余り = 2
になります。
Math.floorMod()はMath.floorDiv()と整合性を保つように設計されています。
通常の剰余との比較表
| 計算式 | %演算子 | floorMod |
|---|---|---|
| 7 % 3 | 1 | 1 |
| -7 % 3 | -1 | 2 |
| 7 % -3 | 1 | -2 |
| -7 % -3 | -1 | -1 |
負数が絡む場合に大きな違いが出ます。
Math.floorDiv()との関係を理解しよう
この2つはセットで使われます。
// 商
int quotient =
Math.floorDiv(
-7,
3
);
// 余り
int remainder =
Math.floorMod(
-7,
3
);
System.out.println(quotient);
System.out.println(remainder);
Java実行結果
-3
2
次の式が成立します。
被除数 =
floorDiv × 除数
+
floorMod
これは数学的に非常に重要な性質です。
実務でよくある利用例① 曜日計算
曜日は循環データです。
// 曜日番号
int day = -1;
// 0~6へ変換
int weekDay =
Math.floorMod(
day,
7
);
System.out.println(weekDay);
Java実行結果
6
負数でも正しく曜日を計算できます。
実務でよくある利用例② 循環インデックス
// 現在位置
int index = -1;
// 配列サイズ
int size = 10;
// 補正
int actualIndex =
Math.floorMod(
index,
size
);
System.out.println(actualIndex);
Java実行結果
9
循環配列でよく利用されます。
実務でよくある利用例③ グループ分け
// ID
int employeeId = 123;
// グループ番号
int groupNo =
Math.floorMod(
employeeId,
5
);
Javaデータ分散処理などで利用されます。
実務でよくある利用例④ ローテーション処理
// 当番番号
int dutyIndex = -2;
// 人数
int memberCount = 8;
// 正しい位置
int actualPosition =
Math.floorMod(
dutyIndex,
memberCount
);
Javaシフト管理システムなどで利用できます。
特に重要:負数インデックス問題を解決できる
実務で非常によくあるケースです。
例えば、
-1 % 10Javaの結果は、
-1
になります。
これを配列の添字として利用するとエラーになります。
しかし、
Math.floorMod(-1, 10)Javaなら、
9
になります。
循環処理では非常に便利です。
long型にも対応している
Math.floorMod()はlong型にも対応しています。
// long版
long result =
Math.floorMod(
-100L,
7L
);
System.out.println(result);
Java大規模システムでも利用できます。
実務で使えるテンプレート集
基本テンプレート
// 剰余
int remain =
Math.floorMod(
value,
divisor
);
Java循環インデックステンプレート
// 配列位置補正
int index =
Math.floorMod(
currentIndex,
array.length
);
Java曜日計算テンプレート
// 0~6へ変換
int day =
Math.floorMod(
offset,
7
);
JavafloorDiv併用テンプレート
// 商
int quotient =
Math.floorDiv(a, b);
// 余り
int remainder =
Math.floorMod(a, b);
Java情報セキュリティの観点から見る重要性
Math.floorMod()自体はセキュリティ機能ではありません。
しかしデータ分析やログ解析では正しい数値処理が重要です。
特に、
- アクセスログ分析
- イベント分散処理
- 統計処理
- データシャーディング
- ハッシュ計算補助
などでは、負数を含む剰余計算の正しさが重要になります。
Math.floorMod()を利用することで、数学的に一貫した処理を実現できます。
初心者が覚えておくべき重要ポイント
- 数学的な剰余を求めるメソッドである
- 正の数では%演算子とほぼ同じである
- 負の数で結果が変わる
- Math.floorDiv()とセットで利用する
- 循環処理で非常に便利である
- 曜日計算などで活躍する
- int型とlong型に対応している
まとめ
Math.floorMod()は、数学的に正しい剰余を求めるためのJava標準メソッドです。
- 余りを計算できる
- 負の数でも一貫した結果を返す
- Math.floorDiv()との整合性が取れている
- 循環インデックス処理に便利である
- 曜日計算やシフト計算に活用できる
- 数学的に正しいロジックを実装できる
- Java開発者が知っておきたい数値演算ユーティリティである
特に業務システムやアルゴリズム開発では、負数を含む剰余計算が必要になることがあります。そのような場面でMath.floorMod()を利用すると、通常の%演算子よりも数学的に一貫した結果を得られます。また、Math.floorDiv()とセットで理解することで、より高度な数値処理やデータ処理を安全に実装できるようになるでしょう。

