【Java】doubleやfloatの計算ではBigDecimalを使いましょう


デデン!突然ですが問題です!

3.3 / 1.1はいくつでしょう?

そう、です。

データ型を意識すれば 3.0 です。

しかしプログラムで計算してみるとなんと 2.9999999999999996 と出てきます。

実はdoubleやfloatの計算では誤差が出てしまう場合があります。
大幅にズレることはないのですが、お金の計算など勘定系のシステムにおいては致命的です。

この誤差を出さないようにするためにはjava.math.BigDecimalクラスを使用して計算を行います。

サンプルで確認してみます。

import java.math.BigDecimal;

public class BigDecimalSample {
	public static void main(String[] args) {
		// doubleで計算
		double doubleAnswer = 3.3 / 1.1;
		System.out.println("double : " + doubleAnswer);

		// BigDecimalで計算
		BigDecimal val1 = BigDecimal.valueOf(3.3);
		BigDecimal val2 = BigDecimal.valueOf(1.1);
		BigDecimal bigDecimalAnswer = val1.divide(val2);
		System.out.println("BigDecimal : " + bigDecimalAnswer);
	}
}

【実行結果】
double : 2.9999999999999996
BigDecimal : 3

BigDecimalクラスにはvalueOfメソッドがあり、これで基本データ型の値を取り込みます。
他にもONE、TEN、ZEROなどの定数も用意されています。
そしてaddメソッド、subtractメソッド、multiplyメソッド、divideメソッドなどを用いて四則演算を行います。

これで誤差のない計算を行うことができます。

  • このエントリーをはてなブックマークに追加

PAGE TOP