お疲れ様です。はるさらと申します。
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 + 1はNaNのまま - 入力データのチェックを怠ると障害につながる
→ ユーザー入力や外部システムからの値は常に疑って扱う
まとめ
Javaの0除算は、
- 整数型 →
ArithmeticException - 浮動小数点型 →
InfinityやNaN
という挙動になります。
経験の浅い方は「割り算だから普通に計算できるはず」と思いがちですが、
0除算はシステムバグの温床です。
実務では必ず0チェックを行い、必要に応じて代替値を設定することが大切です。
この記事のサンプルコードを参考に、
理解を深めるためにも開発環境で実際に動かしてみてください。
どなたかのお役に立てば幸いです。
それではまたー!





































