【Java】0除算の挙動と対策を徹底解説|初心者向けサンプル付き

お疲れ様です。はるさらと申します。

Javaで計算処理を行っていると、「0で割り算をしたらどうなるの?」
という疑問を持つ方は多いと思います。
特に経験の浅い方は、実際にエラーになったり
予想外の動きをして戸惑うこと
もあるでしょう。

この記事では、Javaでの0除算の挙動を分かりやすく整理し、
エラー回避方法や実務での注意点をサンプルコード付きで解説します。


Javaで0除算はどうなるのか?

整数型での0除算

Javaでは、整数型(intやlong)で0除算をすると
例外(ArithmeticException)が発生します。
例えば以下のコードです。

public class ZeroDivisionInt {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        System.out.println(a / b); // ArithmeticException: / by zero
    }
}

実行すると java.lang.ArithmeticException: / by zero
というエラーが出てプログラムが停止します。

浮動小数点型での0除算

一方、doubleやfloatなどの浮動小数点型ではエラーにならず、
特殊な値が返ってきます

public class ZeroDivisionDouble {
    public static void main(String[] args) {
        double a = 10.0;
        double b = 0.0;
        System.out.println(a / b); // Infinity
        System.out.println(b / b); // NaN
    }
}

  • 正の数 ÷ 0 → Infinity
  • 負の数 ÷ 0 → -Infinity
  • 0 ÷ 0 → NaN(Not a Number)

0除算が問題になる理由

  • プログラムが異常終了する可能性(特にintの除算)
  • 計算結果が予想と異なる値になる可能性(InfinityやNaNが混じると処理が複雑化)
  • 実務ではデータ不整合やバグの原因になる

経験の浅い方ほど、単純に「割り算すればいい」と考えてしまいがちですが、
0除算はシステム障害に直結することもあるため注意が必要です。


0除算を防ぐ基本的な方法

if文でチェックする

最も分かりやすいのは、割り算の前に0かどうかを確認する方法です。

public class ZeroDivisionCheck {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;

        if (b != 0) {
            System.out.println(a / b);
        } else {
            System.out.println("0で割ることはできません");
        }
    }
}

この方法はシンプルで、実務でもよく使われます。


実務での利用例

実際のシステム開発では、
数値計算がデータベースやユーザー入力に依存することが多いため、
0除算チェックは必須です。
例えば「売上 ÷ 注文件数」を計算するケースを考えてみましょう。

public class SalesAverage {
    public static void main(String[] args) {
        int sales = 50000;
        int orders = 0; // 注文件数

        double avg = (orders != 0) ? (double) sales / orders : 0.0;
        System.out.println("平均単価: " + avg);
    }
}

注文件数が0のときにそのまま割ってしまうと例外が出ますが、
三項演算子を使って安全に回避できます。


代替手法の比較

try-catchで例外を処理する

もう一つの方法は 例外処理でキャッチする やり方です。

public class ZeroDivisionTryCatch {
    public static void main(String[] args) {
        try {
            int a = 10;
            int b = 0;
            System.out.println(a / b);
        } catch (ArithmeticException e) {
            System.out.println("計算エラー: " + e.getMessage());
        }
    }
}

  • メリット: 予期しないエラーにも対応できる
  • デメリット: 毎回例外処理を書くのは冗長になりやすい

実務では「ifチェックで未然に防ぐ」方が好まれます。


注意点とよくある間違い

  • 整数型と浮動小数点型の違いを混同しやすい
    → intだとエラー、doubleだとInfinity/NaNが返る
  • InfinityやNaNが後続計算に伝播する
    → 例えば NaN + 1NaN のまま
  • 入力データのチェックを怠ると障害につながる
    → ユーザー入力や外部システムからの値は常に疑って扱う

まとめ

Javaの0除算は、

  • 整数型 → ArithmeticException
  • 浮動小数点型 → InfinityNaN

という挙動になります。
経験の浅い方は「割り算だから普通に計算できるはず」と思いがちですが、
0除算はシステムバグの温床です。

実務では必ず0チェックを行い、必要に応じて代替値を設定することが大切です。
この記事のサンプルコードを参考に、
理解を深めるためにも開発環境で実際に動かしてみてください。

どなたかのお役に立てば幸いです。
それではまたー!