
JavaでBigDecimalを使う方法は?算術メソッド・丸め・比較・変換
- SE
- JavaのBigDecimalはどのように使用するのでしょうか。
- PM
- 誤差なく正確に計算するために使用します。実際のソースコードを見ながら学んでいきましょう。
目次
JavaでBigDecimalを使う方法とは?
今回は、JavaでBigDecimalを使う方法について説明します。Javaには誤差なく正確に計算するためのBigDecimalクラスがあります。
JavaのBigDecimalオブジェクトの生成方法、算術メソッド、丸め、比較、変換などについて紹介します。
JavaでBigDecimalを使う方法に興味のある方はぜひご覧ください。
JavaのBigDecimalオブジェクトの生成方法
JavaのBigDecimalオブジェクトは以下の方法で生成します。
1 2 3 4 5 6 7 8 |
import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { BigDecimal value1 = BigDecimal.valueOf(0.9); // 数値から生成 BigDecimal value2 = new BigDecimal(""1.0""); // 文字列から生成 } } |
例えば、JavaのBigDecimalクラスを使用した減算と使用しない減算では、結果が違うことがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { BigDecimal val1 = new BigDecimal(""1""); BigDecimal val2 = new BigDecimal(""0.9""); // 減算 BigDecimal result = val1.subtract(val2); // JavaのBigDecimalクラスを使用した減算と使用しない減算では結果が違う System.out.println(result); System.out.println(1 - 0.9); } } |
実行結果は以下のようになります。
1 2 |
0.1 0.09999999999999998 |
このように、Javaでは誤差なく正確に計算するためにBigDecimalクラスを利用します。
JavaのBigDecimal算術メソッド
JavaのBigDecimalクラスには算術メソッドが用意されています。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { BigDecimal val1 = new BigDecimal(""123.11""); BigDecimal val2 = new BigDecimal(""12.11""); BigDecimal result1 = val1.add(val2); BigDecimal result2 = val1.subtract(val2); BigDecimal result3 = val1.multiply(val2); BigDecimal result4 = val1.divide(val2, 1, BigDecimal.ROUND_HALF_UP); BigDecimal result5 = val1.remainder(val2); System.out.println(""加算:"" + val1 + "".add("" + val2 + "") = "" + result1); System.out.println(""減算:"" + val1 + "".subtract("" + val2 + "") = "" + result2); System.out.println(""乗算:"" + val1 + "".multiply("" + val2 + "") = "" + result3); System.out.println(""除算:"" + val1 + "".divide("" + val2 + "") = "" + result4); System.out.println(""剰余:"" + val1 + "".remainder("" + val2 + "") = "" + result5); } } |
実行結果は以下のようになります。
1 2 3 4 5 |
加算:123.11.add(12.11) = 135.22 減算:123.11.subtract(12.11) = 111.00 乗算:123.11.multiply(12.11) = 1490.8621 除算:123.11.divide(12.11) = 10.2 剰余:123.11.remainder(12.11) = 2.01 |
このように、JavaのBigDecimalクラスには算術メソッドが用意されています。
丸め(切り捨て/切り上げ/四捨五入)
JavaのBigDecimalクラスには丸め(切り捨て/切り上げ/四捨五入)のためのメソッドが用意されています。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.math.BigDecimal; import java.math.RoundingMode; public class Main { public static void main(String[] args) throws Exception { BigDecimal value = new BigDecimal(""400.545""); // RoundingMode.FLOOR(切り捨て)。以下の場合、小数点第1位で切り捨て BigDecimal result1 = value.setScale(0, RoundingMode.FLOOR); // RoundingMode.CEILING(切り上げ)。以下の場合、小数点第2位で切り上げ BigDecimal result2 = value.setScale(1, RoundingMode.CEILING); // RoundingMode.HALF_UP(四捨五入)。以下の場合、小数点第3位で四捨五入 BigDecimal result3 = value.setScale(2, RoundingMode.HALF_UP); System.out.println(result1); System.out.println(result2); System.out.println(result3); } } |
実行結果は以下のようになります。
1 2 3 |
400 400.6 400.55 |
Javaでは、setScaleメソッドで桁と丸めモード(切り捨て/切り上げ/四捨五入)を指定できます。
このように、JavaのBigDecimalクラスには丸め(切り捨て/切り上げ/四捨五入)のためのメソッドが用意されています。
比較
Javaでは、compareToメソッドでBigDecimal型の比較ができます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.math.BigDecimal; public class Main { public static void main(String[] args) throws Exception { BigDecimal val1 = new BigDecimal(""0""); BigDecimal val2 = new BigDecimal(""1.0""); BigDecimal val3 = new BigDecimal(""1.00""); // compareToメソッドで比較 System.out.println(val1 + "".compareTo("" + val2 + "") : "" + val1.compareTo(val2)); System.out.println(val2 + "".compareTo("" + val3 + "") : "" + val2.compareTo(val3)); System.out.println(val3 + "".compareTo("" + val1 + "") : "" + val3.compareTo(val1)); // equalsメソッドで比較 System.out.println(val2 + "".equals("" + val3 + "") : "" + val2.equals(val3)); } } |
実行結果は以下のようになります。
1 2 3 4 |
0.compareTo(1.0) : -1 1.0.compareTo(1.00) : 0 1.00.compareTo(0) : 1 1.0.equals(1.00) : false |
Javaでは、BigDecimalの小数点以下の精度が違う(1.0と1.00の)場合、compareToメソッドは等しいと判断しますが、equalsメソッドは不一致と判断します。
用途に応じて使い分けてください。
- SE
- JavaでBigDecimalクラスを使用すると、減算や丸めによる計算結果の誤差を防いでくれるのですね。
- PM
- 誤差なく正確に計算するために、BigDecimalクラスを実際に使用してみましょう。
まとめ
JavaでBigDecimalを使う方法について説明しました。Javaには誤差なく正確に計算するためのBigDecimalクラスがあります。JavaのBigDecimalオブジェクトの生成方法、算術メソッド、丸め、比較、変換などについて紹介しました。
ぜひご自身でJavaソースコードを書いて、理解を深めてください。