0Pricing
Java Academy · レッスン

BigDecimalの操作

正確な十進演算を学びます

「BigDecimalの操作」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

正確な小数演算

java.mathパッケージのBigDecimalは、任意精度の小数を表現し、隠れた丸め誤差がありません。金融計算の標準的なツールです。

BigDecimalの作成

BigDecimalを作成する最も安全な方法は、文字列から作成することです。入力した桁をそのまま正確に保持できます。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal("42.50");
        System.out.println(amount);
    }
}

不変性

BigDecimalは不変です。addなどの操作は元の値を変更せず、新しいBigDecimalを返します。返された値を受け取って保存する必要があります。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("10");
        a.add(new BigDecimal("5"));
        System.out.println(a);
    }
}

加算と減算

addとsubtractを使用し、結果を保存することを忘れないでください。呼び出すたびに新しい値が返されます。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal price = new BigDecimal("19.99");
        BigDecimal tax = new BigDecimal("1.60");
        BigDecimal total = price.add(tax);
        System.out.println(total);
    }
}

乗算

multiplyは期待どおりに動作します。ただし、結果のスケールはオペランドのスケールの合計になる点に注意してください。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal unit = new BigDecimal("2.50");
        BigDecimal qty = new BigDecimal("3");
        System.out.println(unit.multiply(qty));
    }
}

除算には注意が必要

1を3で割る場合のように、割り切れない値を除算すると、無限小数になります。その場合、通常のdivideはArithmeticExceptionをスローします。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal one = new BigDecimal("1");
        BigDecimal three = new BigDecimal("3");
        try {
            System.out.println(one.divide(three));
        } catch (ArithmeticException e) {
            System.out.println("Need to specify rounding!");
        }
    }
}

丸めを伴う除算

安全に除算するには、スケールとRoundingModeを指定してください。ここでは小数点以下2桁を保持し、四捨五入します。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal one = new BigDecimal("1");
        BigDecimal three = new BigDecimal("3");
        System.out.println(one.divide(three, 2, RoundingMode.HALF_UP));
    }
}

値の比較

数値を比較するにはcompareToを使用してください。equalsはスケールも考慮するため、equalsでは2.0と2.00は等しくありませんが、compareToでは等しくなります。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("2.0");
        BigDecimal b = new BigDecimal("2.00");
        System.out.println(a.equals(b));
        System.out.println(a.compareTo(b) == 0);
    }
}

便利な定数

BigDecimalには、すぐに使える定数としてBigDecimal.ZERO、BigDecimal.ONE、BigDecimal.TENがあります。自分で作成する代わりにこれらを使用してください。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal sum = BigDecimal.ZERO;
        sum = sum.add(BigDecimal.TEN);
        System.out.println(sum);
    }
}

リストの合計

よく使うパターンは、BigDecimal.ZEROから始めて、ループ内で各値を加算し、そのたびに結果を受け取って保存することです。

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal[] prices = {
            new BigDecimal("1.10"),
            new BigDecimal("2.20"),
            new BigDecimal("3.30")
        };
        BigDecimal total = BigDecimal.ZERO;
        for (BigDecimal p : prices) {
            total = total.add(p);
        }
        System.out.println(total);
    }
}

ベストプラクティス

基本事項を覚えておきましょう。文字列から作成すること、値を不変として扱うこと、除算では必ず丸めを指定すること、そしてcompareToで比較することです。

理解度チェック

BigDecimalについての知識を確認しましょう。

まとめ

BigDecimalの使い方について学びました。

  • 正確な桁を保持するには文字列から作成する
  • 不変なので、すべての操作の結果を受け取って保存する
  • add、subtract、multiplyを直接使用する
  • 循環しない小数にならない除算では、divideにスケールとRoundingModeが必要になる
  • equalsではなくcompareToで比較する

よくある質問

「BigDecimalの操作」レッスンは無料ですか?

はい。「BigDecimalの操作」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「BigDecimalの操作」で何を学びますか?

正確な十進演算を学びます ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「BigDecimalの操作」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 金額にdoubleを使わない理由
  2. BigDecimalの操作
  3. 丸めとスケール
  4. 巨大な数値のためのBigInteger
← Java Academyに戻る