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

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

コメント