【Java】整数同士の割り算が切り捨てになる理由をやさしく解説|初心者がつまずくポイントまとめ

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Java を学び始めると必ず出てくる疑問が
「なんで 3 / 2 が 1 になるの?」 という話。

電卓なら 1.5 になるのに、Java では 1。
最初は「バグ?」と思ってしまうかもしれません。

この記事では、やさしく・実務寄りに
整数同士の割り算が切り捨てになる理由を整理していきます。


まずはコードを確認

Java
int a = 3;
int b = 2;

int result = a / b;
System.out.println(result); // 1

double d = a / b;
System.out.println(d); // 1.0(小数は出ない)

double d2 = (double) a / b;
System.out.println(d2); // 1.5(期待通り)

コードのしくみを解説

理由①:int 同士の計算は「int の世界」で完結する

Java では、
演算に使われる型がすべて int なら、結果も int になる
というルールがあります。

3 / 2 → int / int → 結果も int

int は小数を扱えないため、
小数点以下は切り捨て になります。

理由②:演算結果の型は「より大きい型」に合わせて決まる

Java の演算では、 「より大きい型に合わせて計算する」というルールがあります。

  • int と int → int
  • int と double → double
  • int と long → long

つまり、 両方が int のときだけ小数が出ない のです。

理由③:double に代入しても遅い(計算はすでに終わっている)

Java
double d = a / b;

これが 1.0 になる理由は、
割り算の時点で int の計算が終わっている から。

a / b → 1(int)
double d = 1 → 1.0 に変換されるだけ

計算結果が 1 のまま double に変換されるため、
小数は復活しません。


あわせて知っておきたいポイント

小数を出したいなら「どちらかを double にする」

Java
(double) a / b
a / (double) b
(double) (a / b) // これはダメ(計算後にキャストされる)

計算前に double にする のがポイントです。

0 で割ると例外(ArithmeticException)

Java
int x = 10;
int y = 0;
int z = x / y; // 例外

整数割り算では 0 除算は例外になります。

実務では「平均値」でよくハマる

Java
int sum = 5;
int count = 2;

double avg = sum / count; // 2.0(本当は 2.5)

平均値の計算は実務でもよくある落とし穴です。


使うときに気をつけたいこと

  • int 同士の割り算は必ず切り捨てになる
  • double に代入しても小数は復活しない
  • 小数を出したいなら計算前に double にする
  • 平均値の計算は特に注意
  • 0 で割ると例外になる

実務では「なぜか小数が出ない」という相談がよくあり、
ほとんどが「int 同士の割り算」が原因です。


まとめ

整数割り算が切り捨てになる理由

  • int 同士の計算は int の世界で完結する
  • int は小数を扱えない
  • double に代入しても計算結果は変わらない

小数を出したいとき

  • 計算前にどちらかを double にキャストする

decopon
decopon

整数同士の割り算は、 「int の世界で完結する」というルールを知るだけで 一気に理解が進みます。Java Bronze の試験でも、実務の計算処理でも、 ここを押さえておくと安心してコードが書けます。
あなたの学びが、次のステップにつながりますように。

moco
moco

3/2 が 1 になるのは、
“int の世界”で計算してるからなんだって。
小数を出したいときは、ちょっとだけ型を広げてあげようね。

コメント

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