Yomiage
メニュー

Java実践講座 02:型・変数・数値の境界を扱う

更新 2026/9/27 6:22:11 公開

投稿者: しゅりりん

この回では、値に合う型を選び、整数の割り算や桁あふれを予測します。前提は第01回です。

型は操作の約束

intは32ビット整数、longは64ビット整数です。doubleは近似的な小数、booleanは真偽、Stringは文字列です。変数には宣言した型に合う値を入れます。varは初期値から型を推論する構文であり、途中で自由に型を変える仕組みではありません。

int同士の割り算は整数の結果になります。計算が終わった後でdoubleへ代入しても、失われた小数は戻りません。片方を先にdoubleへ変換します。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        int pages = 7;
        int days = 2;
        System.out.println(pages / days);
        System.out.println((double) pages / days);
        long seconds = 60L * 60 * 24 * 365;
        System.out.println(seconds);
        BigDecimal price = new BigDecimal("0.1");
        System.out.println(price.add(new BigDecimal("0.2")));
        try {
            System.out.println(Math.addExact(Integer.MAX_VALUE, 1));
        } catch (ArithmeticException e) {
            System.out.println("整数の範囲を超えました");
        }
    }
}

Main.javaとして実行すると、3、3.5、31536000、0.3、範囲を超えたというメッセージが順に出ます。Lを最初の数に付けることで、途中の掛け算もlongとして計算します。結果の受け皿だけをlongにしても、intで先にあふれれば手遅れです。

正確さの要件から選ぶ

doubleは2進数の有限桁で近似します。0.1のような10進小数が厳密に表せない場合があります。価格など10進数としての計算が必要ならBigDecimalを文字列から作り、丸め方も仕様として決めます。常にBigDecimalを使えばよいわけではなく、科学計算ではdoubleが適切な場合もあります。

finalは変数の再代入を禁止します。ただし、finalで宣言したリストの中身まで変更禁止になるとは限りません。「変数を付け替えない」と「参照先が変わらない」を分けて理解します。

練習と解答

練習:5件の処理に合計12秒かかったとき、1件あたりの秒数を小数で求めてください。さらにintの最大値に普通の + 1 を行うとどうなるか予想します。

解答:12.0 / 5 は2.4です。Javaの通常のint加算は桁あふれを自動で例外にせず、この例では負の最小値に回り込みます。検出が必要ならMath.addExactを使います。明示的なキャストは、範囲や精度が安全であることを保証しません。

卒業チェック:値の範囲、精度、丸め方の三つを挙げて型を選べますか。

公式資料

Java言語の基礎とBigDecimal APIを参照できます。


Java全20回の目次 | 前の回 | 次の回

このブラウザでは Web Speech API が利用できません。

1 / 17 · 停止中