Java:BigDecimalを使用した誤差の発生しない計算方法

Javaでは小数点以下の数値をdoubleやfloatのまま計算(四則演算)を行うと2進数で処理されるため、2進数で扱いきれない数値は丸め誤差が発生してしまいます。金額など誤差が許されない計算をJavaで実施する場合はBigDecimalを使用するべきです。

doubleやfloatで誤差が出る例

  • 以下の様な計算をdoubleやfloatで実施すると丸め誤差が発生して正確な結果が得られません。
  • コンソール

BigDecimalで加算した場合の例

  • 上記の誤差が発生した計算をBigDecimalで実施すると以下の様に誤差は発生しなくなります。
  • コンソール

BigDecimalで減算、乗算した場合の例

  • BigDecimalで減算する場合はsubstractメソッド、乗算する場合はmultiplyメソッドを使用します。
  • コンソール

BigDecimalで除算(四捨五入、切り捨て、切り上げ)した場合の例

  • BigDecimalで除算する場合はdivideメソッドを使用し、第2引数へ取得したい小数部の桁数、第3引数へ第2引数へ指定した桁以降の扱い(RoundingMode.*)を指定します。
  • コンソール
  • RoundingModeの種類について
    RoundingModeの列挙型定数説明
    RoundingMode.HALF_UP四捨五入
    RoundingMode.FLOOR切り捨て(負の無限大に近づくように丸める)
    RoundingMode.DOWN切り捨て(0に近づくように丸める)
    RoundingMode.CEILING切り上げ
    RoundingMode.HALF_DOWN五捨六入(もっとも近い数字に丸める)
    RoundingMode.HALF_EVEN偶数の場合はHALF_DOWN、奇数の場合はHALF_UPのように動作します
    RoundingMode.UNNECESSARY何もしない
    ※丸めが必要な場合はArithmeticExceptionをスローします

コメントを残す

メールアドレスが公開されることはありません。

email confirm*

post date*