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 | 何もしない |
コメント