Java 小数点がある計算のサンプル(BigDecimal)

Javaの小数点がある計算のサンプルです。

目次

クラス BigDecimalクラス
メソッド 足し算 (addメソッド)
  引き算 (subtractメソッド)
  掛け算 (multiplyメソッド)
  割り算 (divideメソッド)
定数 四捨五入/切り上げ/切り捨てを指定(RoundingMode)

BigDecimalクラス

足し算 (addメソッド)

public BigDecimal add(BigDecimal augend)

コード

BigDecimalクラスの足し算のサンプルです。

package test1;
import java.math.BigDecimal;

public class Test1 {
	public static void main(String[] args) {
		double d1 = 2.1;
		double d2 = 3.2;
		BigDecimal b1 = new BigDecimal(String.valueOf(d1));
		BigDecimal b2 = new BigDecimal(String.valueOf(d2));

		// 足し算   2.1+3.2
		BigDecimal t1 = (b1.add(b2));
		System.out.println(t1.toPlainString()); //5.3
		System.out.println(t1.doubleValue()); //5.3
	}
}

6,7行目は、double型の数値です。
8,9行目は、double型の数値をStringクラスのvalueOfメソッドで文字列に変換し、
それをBigDecimalクラスのコンストラクタの引数としてBigDecimal型にしています。

12行目はaddメソッドで足し算をしています。
13行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
14行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。

引き算 (subtractメソッド)

public BigDecimal subtract(BigDecimal subtrahend)

コード

BigDecimalクラスの引き算のサンプルです。

package test1;
import java.math.BigDecimal;

public class Test1 {
	public static void main(String[] args) {
		double d1 = 2.1;
		double d2 = 3.2;
		BigDecimal b1 = new BigDecimal(String.valueOf(d1));
		BigDecimal b2 = new BigDecimal(String.valueOf(d2));

		// 引き算   2.1-3.2
		BigDecimal t2 = (b1.subtract(b2));
		System.out.println(t2.toPlainString()); //-1.1 
		System.out.println(t2.doubleValue()); //-1.1 
	}
}

6,7行目は、double型の数値です。
8,9行目は、double型の数値をStringクラスのvalueOfメソッドで文字列に変換し、
それをBigDecimalクラスのコンストラクタの引数としてBigDecimal型にしています。

12行目はsubtractメソッドで引き算をしています。
13行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
14行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。

掛け算 (multiplyメソッド)

public BigDecimal multiply(BigDecimal multiplicand)

コード

BigDecimalクラスの掛け算のサンプルです。

package test1;
import java.math.BigDecimal;

public class Test1 {
	public static void main(String[] args) {
		double d1 = 2.1;
		double d2 = 3.2;
		BigDecimal b1 = new BigDecimal(String.valueOf(d1));
		BigDecimal b2 = new BigDecimal(String.valueOf(d2));

		// 掛け算   2.1*3.2
		BigDecimal t3 = (b1.multiply(b2));
		System.out.println(t3.toPlainString()); //6.72 
		System.out.println(t3.doubleValue()); //6.72
	}
}

6,7行目は、double型の数値です。
8,9行目は、double型の数値をStringクラスのvalueOfメソッドで文字列に変換し、
それをBigDecimalクラスのコンストラクタの引数としてBigDecimal型にしています。

12行目はmultiplyメソッドで掛け算をしています。
13行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
14行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。

割り算 (divideメソッド)

public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
  • BigDecimalクラスの割り算のメソッドです。
  • 1つめの引数はBigDecimal型です。
  • 2つめの引数は、求める小数点以下の桁数をint型で指定します。
    例:小数第三位で切り捨てする場合は、2を指定する。
  • 3つめの引数は、RoundingMode型の列挙定数です。四捨五入/切り上げ/切り捨てを指定します。
  • 戻り値はBigDecimal型です。
  • 以下はJava8 API仕様のdivideメソッドのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html#subtract-java.math.BigDecimal-

コード

BigDecimalクラスの割り算のサンプルです。

package test1;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test1 {
	public static void main(String[] args) {
		double d1 = 2.1;
		double d2 = 3.2;
		BigDecimal b1 = new BigDecimal(String.valueOf(d1));
		BigDecimal b2 = new BigDecimal(String.valueOf(d2));

		// 割り算   2.1/3.2=0.65625 小数第3位を四捨五入 
		BigDecimal t4 =(b1.divide(b2,2,RoundingMode.HALF_UP)); 
		System.out.println("四捨五入:" + t4.toPlainString()); //0.66
		System.out.println("四捨五入:" + t4.doubleValue()); //0.66
	}
}

7,8行目は、double型の数値です。
9,10行目は、double型の数値をStringクラスのvalueOfメソッドで文字列に変換し、
それをBigDecimalクラスのコンストラクタの引数としてBigDecimal型にしています。
13行目は、割り算をして少数第3位を四捨五入しています。

14行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
15行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。

以下は、2.1/3.2の割り算をした後に四捨五入、切り上げ、切り捨てを行うサンプルです。


		// 割り算   2.1/3.2=0.65625 小数第2位を四捨五入 
		BigDecimal t5 =(b1.divide(b2,1,RoundingMode.HALF_UP)); 
		System.out.println("四捨五入:" + t5.toPlainString()); //0.7
		
		
		// 割り算   2.1/3.2=0.65625 小数第3位を切り上げ
		BigDecimal t6 = (b1.divide(b2,2,RoundingMode.UP));
		System.out.println("切り上げ:" + t6.toPlainString()); //0.66
		
		// 割り算   2.1/3.2=0.65625 小数第2位を切り上げ
		BigDecimal t7 = (b1.divide(b2,1,RoundingMode.UP));
		System.out.println("切り上げ:" + t7.toPlainString()); //0.7
		
		
		// 割り算  2.1/3.2=0.65625  小数第3位を切り捨て
		BigDecimal t8 = (b1.divide(b2,2,RoundingMode.DOWN));
		System.out.println("切り捨て:" + t8.toPlainString()); //0.65
		
		// 割り算  2.1/3.2=0.65625  小数第2位を切り捨て
		BigDecimal t9 = (b1.divide(b2,1,RoundingMode.DOWN));
		System.out.println("切り捨て:" + t9.toPlainString()); //0.6

四捨五入/切り上げ/切り捨てを指定(RoundingMode)

divideメソッドの3つめの引数は、列挙型のRoundingMode型にある列挙定数を指定します。

列挙定数
定数 説明
RoundingMode.HALF_UP 四捨五入します。
RoundingMode.UP 0から離れるように丸めます。切り上げする時に指定します。
例:小数第一位で指定した場合
2.1 → 3
-2.1 → -3
RoundingMode.DOWN 0に近づくように丸めます。切り捨てする時に指定します。
例:小数第一位で指定した場合
2.1 → 2
-2.1 → -2

以下はJava8 API仕様のRoundingMode型のリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/RoundingMode.html

ROUND_HALF_UPなどのROUND_系はJava9で非推奨になりましたので注意して下さい。

以下は、OracleのJava9のBigDecimalクラスのフィールドのリンクです。
https://docs.oracle.com/javase/jp/9/docs/api/java/math/BigDecimal.html#BigDecimal.1D5yk

関連の記事

Java 小数点以下の切り上げのサンプル(setScale)
Java 小数点以下の切り捨てのサンプル(setScale)
Java 小数点以下の四捨五入のサンプル(setScale)
Java 切り上げのサンプル(ceil)
Java 切り捨てのサンプル(floor)
Java 四捨五入するサンプル(round)
Java 数値と文字列の変換のサンプル(valueOf)

△上に戻る