【Java初心者】BigDecimalで正確に四則演算する書き方!

java Java

※この記事にはプロモーションが含まれています。

Javaで少数の計算をする場合はfloatやdoubleを使うと丸め誤差が発生して計算がずれてしまう事があります。

誤差を発生させないために少数を使った計算を扱う場合は、BigDecimalを使って計算をします。
ここではBigDecimalを使っての足し算引き算掛け算割り算を説明します。

スポンサーリンク

足し算(加算) BigDecimal.add

足し算を行うにはaddを使います

BigDecimal b1 = new BigDecimal("2.2");
BigDecimal b2 = new BigDecimal("1.1");
BigDecimal b3 = b1.add(b2);

System.out.println(b3.toString());

実行結果

3.3

引き算(減算) BigDecimal.subtract

引き算を行うにはsubtractを使います

BigDecimal b1 = new BigDecimal("2.2");
BigDecimal b2 = new BigDecimal("1.1");
BigDecimal b3 = b1.subtract(b2);

System.out.println(b3.toString());

実行結果

1.1

掛け算(乗算) BigDecimal.multiply

掛け算を行うにはmultiplyを使います

BigDecimal b1 = new BigDecimal("2.2");
BigDecimal b2 = new BigDecimal("1.1");
BigDecimal b3 = b1.multiply(b2);

System.out.println(b3.toString());

実行結果

2.42

割り算(除算) BigDecimal.divide

割り算を行うにはdivideを使います、第3引数で丸めモードを指定することが出来ます

BigDecimal b1 = new BigDecimal("2.2");
BigDecimal b2 = new BigDecimal("1.1");
// 丸めモード、小数点第1位で四捨五入
BigDecimal b3 = b1.divide(b2, 0, RoundingMode.HALF_UP);
// 丸めモード、小数点第2位で四捨五入
BigDecimal b4 = b1.divide(b2, 1, RoundingMode.HALF_UP);

System.out.println(b3.toString());
System.out.println(b4.toString());

実行結果

2
2.0

割り算の場合は必ず丸めモードを指定するようにしましょう、
結果が無限小数になるとExceptionが発生します

丸めモード BigDecimal.setScale

丸め処理を行う方法としてsetScaleを使う方法もあります

BigDecimal b1 = new BigDecimal("2.2");
// 丸めモード、小数点第1位で四捨五入
BigDecimal b2 = b1.setScale(0, RoundingMode.HALF_UP);

System.out.println(b3.toString());

実行結果

2

丸めモードの種類

丸めモード
RoundingMode.UP切り上げ
RoundingMode.DOWN切り捨て
RoundingMode.HALF_UP四捨五入
RoundingMode.HALF_DOWN五捨六入
RoundingMode.HALF_EVEN「もっとも近い数字」に丸める
RoundingMode.CEILING切り上げ
RoundingMode.FLOOR切り捨て
RoundingMode.UNNECESSARY何もしない

コメント

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