Javaの小数点がある計算のサンプルです。
目次
クラス | BigDecimalクラス |
メソッド | 足し算 (addメソッド) |
引き算 (subtractメソッド) | |
掛け算 (multiplyメソッド) | |
割り算 (divideメソッド) | |
定数 | 四捨五入/切り上げ/切り捨てを指定(RoundingMode) |
BigDecimalクラス
- 小数点以下の計算を誤差なくできます。
- 金額の計算を行うときなどに使用します。
- 以下はJava8 API仕様のBigDecimalクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html
足し算 (addメソッド)
public BigDecimal add(BigDecimal augend) |
- BigDecimalクラスの足し算のメソッドです。
- 引数はBigDecimal型です。
- 戻り値もBigDecimal型です。
- 以下はJava8 API仕様のaddメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html#add-java.math.BigDecimal-
コード
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クラスの引き算のメソッドです。
- 引数はBigDecimal型です。
- 戻り値もBigDecimal型です。
- 以下はJava8 API仕様のsubtractメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html#subtract-java.math.BigDecimal-
コード
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クラスの掛け算のメソッドです。
- 引数はBigDecimal型です。
- 戻り値もBigDecimal型です。
- 以下はJava8 API仕様のsubtractメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal-
コード
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 数値と文字列を変換する