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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 金額にdoubleを使わない理由
- BigDecimalの操作
- 丸めとスケール
- 巨大な数値のためのBigInteger