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
型 | 定数 | 説明 |
---|---|---|
int | ROUND_CEILING | 正の無限大に近づくように丸めるモード (例)42.1→43.0、-42.1→-42.0 |
int | ROUND_DOWN | ゼロに近づくように丸めるモード (例)42.1→42.0、-42.1→-42.0 |
int | ROUND_FLOOR | 負の無限大に近づくように丸めるモード (例)42.1→42.0、-42.1→-43.0 |
int | ROUND_HALF_DOWN | 五捨六入する (例)42.5→42.0、42.6→43.0、 -42.5→-42.0、-42.6→-43.0 |
int | ROUND_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 |
int | ROUND_HALF_UP | 四捨五入する (例)42.4→42.0、42.5→43.0、 -42.4→-42.0、-42.5→-43.0 |
int | ROUND_UNNECESSARY | 丸め不要 |
int | ROUND_UP | 0 から離れるように丸めるモード (例)42.1→43.0、-42.1→-43.0 |
例はすべて小数第1位を対象としています。
戻値型 | メソッド | 静的 | 説明 |
---|---|---|---|
BigDecimal | add(BigDecimal a) | aを加算する | |
BigDecimal | subtract(BigDecimal a) | aを減算する | |
BigDecimal | multiply(BigDecimal a) | aを乗算する | |
BigDecimal | divide(BigDecimal a, int b, int c) | aを除算する。条件として小数第b位で除算し、丸め方法はcとする。 ※丸め方法は定数で指定します(上表を参照) | |
int | intValue() | BigDecimal値をint型で返す | |
long | longValue() | BigDecimal値をlong型で返す | |
float | floatValue() | BigDecimal値をfloat型で返す | |
double | doubleValue() | BigDecimal値をdouble型で返す | |
int | signum() | BigDecimal値の符号を返す 負値:-1 ゼロ:0 正値:1 | |
BigDecimal | max(BigDecimal a) | aの値と比較して大きいほうを返す | |
BigDecimal | min(BigDecimal a) | aの値と比較して小さいほうを返す | |
int | scale() | スケールを返す |
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
コメント