Java Tips | 基本ユーティリティ:Math.floorDiv()

Web APP Java
スポンサーリンク
スポンサーリンク

Math.floorDiv()とは何か

Javaで業務システムを開発していると、割り算の商(しょう)を求める処理は頻繁に登場します。

例えば、

  • ページ数計算
  • 在庫の箱数計算
  • グループ分け処理
  • 日数集計
  • バッチ処理単位の計算
  • インデックス計算

などです。

通常であれば、

a / b
Java

を利用します。

しかしJavaには、

Math.floorDiv()
Java

という特別な割り算メソッドがあります。

このメソッドは、

「商を数学的な切り下げ(floor)で計算する」

ためのメソッドです。

特に負の数が関係する計算では通常の割り算と結果が変わるため、実務では重要な知識になります。

まずは通常の整数除算を理解しよう

Javaの整数同士の割り算は、小数部分を切り捨てます。

// 整数除算
int result = 7 / 3;

System.out.println(result);
Java

実行結果

2

7 ÷ 3 = 2.333…ですが、小数部分が切り捨てられます。

これだけならMath.floorDiv()との違いはありません。

問題は負の数です。

Math.floorDiv()の基本構文

構文は非常にシンプルです。

Math.floorDiv(被除数, 除数)
Java

実際に使ってみましょう。

// 割り算
int result =
        Math.floorDiv(
                7,
                3
        );

// 結果表示
System.out.println(result);
Java

実行結果

2

正の数同士なら通常の割り算と同じ結果になります。

ステップバイステップで理解する

ステップ1:割る値を用意する

// 件数
int total = 25;
Java

ステップ2:除数を用意する

// 1グループの人数
int groupSize = 5;
Java

ステップ3:Math.floorDiv()を実行する

// グループ数計算
int result =
        Math.floorDiv(
                total,
                groupSize
        );
Java

ステップ4:結果を確認する

// 出力
System.out.println(result);
Java

実行結果

5

25 ÷ 5 = 5 が計算されました。

通常の割り算との違いはどこにあるのか

ここが最重要ポイントです。

正の数では違いが分かりません。

// 通常除算
System.out.println(-7 / 3);
Java

実行結果

-2

一方、

// floorDiv
System.out.println(
        Math.floorDiv(-7, 3)
);
Java

実行結果

-3

結果が違います。

なぜ結果が違うのか

数学的な考え方を理解すると分かりやすくなります。

-7 ÷ 3 は、

-2.333333...

です。

通常の整数除算は、

-2.333...
↓
-2

になります。

これは0方向への切り捨てです。

しかしMath.floorDiv()は、

-2.333...
↓
-3

となります。

数学的な「床関数(floor)」を使用するためです。

つまり、

「小さい方向へ切り下げる」

と考えると分かりやすいでしょう。

floor(床関数)とは何か

Math.floorDiv()の名前の由来です。

floorは数学で

「値以下の最大の整数」

を意味します。

値floor値
2.92
2.12
-2.1-3
-2.9-3

Math.floorDiv()はこの考え方で商を求めています。

通常除算との比較表

計算式/floorDiv
7 / 322
-7 / 3-2-3
7 / -3-2-3
-7 / -322

負数が絡む場合に差が発生します。

実務でよくある利用例① インデックス計算

// データ位置
int position = -7;

// 区間サイズ
int blockSize = 3;

// ブロック番号
int block =
        Math.floorDiv(
                position,
                blockSize
        );

System.out.println(block);
Java

負方向を含む座標計算で利用されます。

実務でよくある利用例② 日数区分計算

// 経過時間
long minutes = 1500;

// 日数換算
long days =
        Math.floorDiv(
                minutes,
                1440
        );

System.out.println(days);
Java

集計システムで利用できます。

実務でよくある利用例③ グループ分け

// レコード番号
int id = 23;

// グループサイズ
int size = 5;

// グループ番号
int groupNo =
        Math.floorDiv(
                id,
                size
        );
Java

データ分割処理などで利用されます。

実務でよくある利用例④ 座標システム

// X座標
int x = -15;

// セルサイズ
int cellSize = 10;

// セル番号
int cell =
        Math.floorDiv(
                x,
                cellSize
        );
Java

ゲームやGISシステムで役立ちます。

Math.floorMod()との関係

Math.floorDiv()には相性の良い兄弟メソッドがあります。

Math.floorMod()
Java

です。

通常、


商 → floorDiv
余り → floorMod

として利用します。

// 商
int quotient =
        Math.floorDiv(
                -7,
                3
        );

// 余り
int remainder =
        Math.floorMod(
                -7,
                3
        );
Java

実務ではセットで登場することが多いです。

long型にも対応している

Math.floorDiv()はlong型にも対応しています。

// long版
long result =
        Math.floorDiv(
                100L,
                3L
        );

System.out.println(result);
Java

実行結果

33

大規模データ処理でも利用できます。

特に重要:負の値を扱う業務ロジックで活躍する

初心者のうちは、

a / b
Java

だけで十分に感じるかもしれません。

しかし、

  • 座標システム
  • 時系列分析
  • 統計処理
  • シミュレーション
  • アルゴリズム開発

では、数学的な床関数を使った除算が必要になることがあります。

そのような場面でMath.floorDiv()が役立ちます。

実務で使えるテンプレート集

基本テンプレート


// 商の切り下げ
int result =
        Math.floorDiv(
                value,
                divisor
        );
Java

long型テンプレート


// long版
long result =
        Math.floorDiv(
                value,
                divisor
        );
Java

グループ計算テンプレート


// グループ番号
int groupNo =
        Math.floorDiv(
                recordNo,
                groupSize
        );
Java

floorMod併用テンプレート


// 商
int quotient =
        Math.floorDiv(a, b);

// 余り
int remainder =
        Math.floorMod(a, b);
Java

情報セキュリティの観点から見る重要性

Math.floorDiv()自体はセキュリティ機能ではありません。

しかし統計処理や異常検知システムでは数学的に正しい計算が重要です。

例えば、

  • ログ分析
  • アクセス分析
  • 行動分析
  • 異常検知
  • 機械学習前処理

などでは、負数を含むデータを正しく処理する必要があります。

Math.floorDiv()を利用することで、数学的に一貫した計算ができるようになります。

初心者が覚えておくべき重要ポイント

  • 商を数学的に切り下げるメソッドである
  • 正の数では通常除算とほぼ同じである
  • 負の数で結果が変わる
  • floorは「下方向への切り下げ」である
  • Math.floorMod()とセットで利用される
  • int型とlong型に対応している
  • 負数を扱うロジックで特に有効である

まとめ

Math.floorDiv()は、数学的な床関数を利用して商を計算するJava標準メソッドです。

  • 商を切り下げで計算できる
  • 負の数で通常除算との違いが現れる
  • floorの概念を正しく実装できる
  • Math.floorMod()との相性が良い
  • 座標計算や統計処理で活躍する
  • 数学的に一貫した計算が可能になる
  • Java開発者が知っておきたい数値演算ユーティリティである

特に業務システムやアルゴリズム実装では、負の数を含む除算処理が重要になる場面があります。そのようなケースでMath.floorDiv()を利用すると、数学的に正しい結果を得られるようになります。また、Math.floorMod()とあわせて理解することで、より高度な数値処理やデータ処理を実装できるようになるでしょう。

タイトルとURLをコピーしました