丸めとスケール
精度と丸めモードを制御します
「丸めとスケール」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
スケールと精度
すべてのBigDecimalにはスケールがあります。これは小数点以下の桁数です。値12.340のスケールは3です。スケールを制御すると、金額を小数点以下2桁ちょうどで表示できます。
スケールの確認
scale()を呼び出すと、値が持つ小数点以下の桁数を確認できます。また、precision()では有効桁数の合計を確認できます。
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.340");
System.out.println(v.scale());
System.out.println(v.precision());
}
}setScaleで小数桁数を固定する
setScaleは、値の小数点以下の桁数を指定した数に固定します。丸めが必要な場合はRoundingModeを渡す必要があります。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.3456");
System.out.println(v.setScale(2, RoundingMode.HALF_UP));
}
}HALF_UP、一般的な丸め方式
RoundingMode.HALF_UPは最も近い値に丸め、ちょうど中間の場合はゼロから遠い方に丸めます。学校で習う日常的な四捨五入です。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_UP));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_UP));
}
}HALF_EVEN、銀行丸め
HALF_EVENは中間の値を最も近い偶数の桁へ丸めます。多くの丸めを行ったときの偏りを抑えられるため、銀行でよく使われます。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_EVEN));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_EVEN));
}
}CEILINGとFLOOR
CEILINGは常に正の無限大方向へ、FLOORは常に負の無限大方向へ丸めます。どちらも切り捨てる桁の値には左右されません。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.1");
System.out.println(v.setScale(0, RoundingMode.CEILING));
System.out.println(v.setScale(0, RoundingMode.FLOOR));
}
}DOWNとUP
DOWNはゼロ方向へ切り捨て、UPは常にゼロから遠い方向へ丸めます。DOWNは単純な切り捨てです。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.9");
System.out.println(v.setScale(0, RoundingMode.DOWN));
System.out.println(v.setScale(0, RoundingMode.UP));
}
}除算中の丸め
除算では無限に続く小数が生じることがあるため、divideの呼び出し時にスケールと丸め方式を指定します。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal bill = new BigDecimal("100.00");
BigDecimal people = new BigDecimal("3");
System.out.println(bill.divide(people, 2, RoundingMode.HALF_UP));
}
}末尾のゼロを削除する
stripTrailingZerosは余分なゼロを削除します。出力が指数表記になるのを避けるには、toPlainStringと組み合わせてください。
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.300");
System.out.println(v.stripTrailingZeros().toPlainString());
}
}金額のフォーマット
表示用にはHALF_UPを指定してスケールを2に設定し、整数の金額であっても価格が常に小数点以下2桁で表示されるようにします。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("7");
System.out.println(amount.setScale(2, RoundingMode.HALF_UP));
}
}方式の選択
通常のユーザー向けの丸めにはHALF_UPを、累積する偏りを抑えたい会計処理にはHALF_EVENを選んでください。循環小数の結果でコードが例外をスローしないよう、必ず方式を指定してください。
理解度チェック
スケールと丸めについての知識を確認しましょう。
まとめ
精度を制御する方法について学びました。
- スケールは小数点以下の桁数である
setScaleで小数桁数を固定し、RoundingModeを指定する必要があるHALF_UPは日常的な四捨五入、HALF_EVENは銀行丸めであるCEILING、FLOOR、UP、DOWNで方向性のある丸めを扱える- 例外を避けるため、除算では必ず方式を指定する
よくある質問
「丸めとスケール」レッスンは無料ですか?
はい。「丸めとスケール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「丸めとスケール」で何を学びますか?
精度と丸めモードを制御します ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「丸めとスケール」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。