[API] java.math.BigDecimalクラス

java.math.BigDecimalは、高精度な数値演算を行うためのクラスです。

java.math.BigDecimalについて

float型やdouble型の浮動小数の計算では、誤差が出る可能性があります。
例えば下の2つの演算では両方とも結果は3分の2となるので同じ値が返るはずですが・・・

double val1 = 1.0 - (1.0 / 3.0);    // 1-(1/3) → 3分の2
double val2 = 2.0 / 3.0;            // → 3分の2

画面表示してみると微妙に誤差が出てしまいます。

val1 → 0.6666666666666667
val2 → 0.6666666666666666

金額計算等で絶対に誤差が許されない場合は、BigDecimal型を使って演算を行います。

java.math.BigDecimalの継承・実装

継承クラス

java.lang.Object
 ・java.lang.Number
  ・java.math.BigDecimal

実装インターフェース

java.io.Serializable
・java.lang.Comparable<BigDecimal>

導入バージョン

・JDK1.2

java.math.BigDecimalのAPI

【主要定数】
定数説明
intROUND_CEILING正の無限大に近づくように丸めるモード
(例)42.1→43.0、-42.1→-42.0
intROUND_DOWNゼロに近づくように丸めるモード
(例)42.1→42.0、-42.1→-42.0
intROUND_FLOOR負の無限大に近づくように丸めるモード
(例)42.1→42.0、-42.1→-43.0
intROUND_HALF_DOWN五捨六入する
(例)42.5→42.0、42.6→43.0、
 -42.5→-42.0、-42.6→-43.0
intROUND_HALF_EVEN末尾が偶数のほうに丸める
(例)42.4→42.0、42.5→42.0、
 43.4→43.0、43.5→44.0、
 -42.4→-42.0、-42.5→-42.0、
 -43.4→-43.0、-43.5→-44.0
intROUND_HALF_UP四捨五入する
(例)42.4→42.0、42.5→43.0、
 -42.4→-42.0、-42.5→-43.0
intROUND_UNNECESSARY丸め不要
intROUND_UP0 から離れるように丸めるモード
(例)42.1→43.0、-42.1→-43.0

例はすべて小数第1位を対象としています。

【主要メソッド】
戻値型メソッド静的説明
BigDecimaladd(BigDecimal a)aを加算する
BigDecimalsubtract(BigDecimal a)aを減算する
BigDecimalmultiply(BigDecimal a)aを乗算する
BigDecimaldivide(BigDecimal a, int b, int c)aを除算する。条件として小数第b位で除算し、丸め方法はcとする。
※丸め方法は定数で指定します(上表を参照)
intintValue()BigDecimal値をint型で返す
longlongValue()BigDecimal値をlong型で返す
floatfloatValue()BigDecimal値をfloat型で返す
doubledoubleValue()BigDecimal値をdouble型で返す
intsignum()BigDecimal値の符号を返す
負値:-1 ゼロ:0 正値:1
BigDecimalmax(BigDecimal a)aの値と比較して大きいほうを返す
BigDecimalmin(BigDecimal a)aの値と比較して小さいほうを返す
intscale()スケールを返す

java.math.BigDecimalサンプル

(BigDecimalを使用した四則演算サンプル)

import java.math.BigDecimal;

public class BigDecimalSample {

  public static void main(String args[]) {

    //BigDecimalの生成
    BigDecimal a = new BigDecimal("1.0");
    BigDecimal b = new BigDecimal("2.0");
    BigDecimal c = new BigDecimal("3.0");
 
    //足し算(1.0 + 2.0)
    double val1 = a.add(b).doubleValue();

    //引き算(1.0 - 2.0)
    double val2 = a.subtract(b).doubleValue();

    //掛け算(2.0 × 3.0)
    double val3 = b.multiply(c).doubleValue();

    //割り算(1.0 ÷ 3.0 を小数第3位で切上げ)
    double val4 = a.divide(c, 3, BigDecimal.ROUND_HALF_UP).doubleValue();

    //画面表示
    System.out.println(val1);
    System.out.println(val2);
    System.out.println(val3);
    System.out.println(val4);
  }
}
(実行結果)
C:\>java BigDecimalSample 3.0 -1.0 6.0 0.333

コメント

タイトルとURLをコピーしました