0Pricing
Java Academy · レッスン

丸めとスケール

精度と丸めモードを制御します

「丸めとスケール」は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フィードバックを取得できます。ローカル設定は不要です。

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

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