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-
コード
10,11行目は、BigDecimalクラスのコンストラクタの引数に文字列をセットしてインスタンス化しています。
→double型の数値をStringクラスのvalueOfメソッドで文字列に変換しています。
14行目はaddメソッドで足し算をしています。
15行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
16行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。
package test1;
import java.math.BigDecimal;
/**
* BigDecimalのaddメソッドのサンプル
*/
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
}
}
引き算 (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-
コード
10,11行目は、BigDecimalクラスのコンストラクタの引数に文字列をセットしてインスタンス化しています。
→double型の数値をStringクラスのvalueOfメソッドで文字列に変換しています。
14行目はsubtractメソッドで引き算をしています。
15行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
16行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。
package test1;
import java.math.BigDecimal;
/**
* BigDecimalのsubtractメソッドのサンプル
*/
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
}
}
掛け算 (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-
コード
10,11行目は、BigDecimalクラスのコンストラクタの引数に文字列をセットしてインスタンス化しています。
→double型の数値をStringクラスのvalueOfメソッドで文字列に変換しています。
14行目はmultiplyメソッドで掛け算をしています。
15行目のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
16行目のdoubleValueメソッドは、BigDecimal型をdouble型にして返します。
package test1;
import java.math.BigDecimal;
/**
* BigDecimalのmultiplyメソッドのサンプル
*/
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
}
}
割り算 (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-
コード
11,12行目は、BigDecimalクラスのコンストラクタの引数に文字列をセットしてインスタンス化しています。
→double型の数値をStringクラスのvalueOfメソッドで文字列に変換しています。
16行目以下のtoPlainStringメソッドは、BigDecimal型をString型にして返します。
doubleValueメソッドは、BigDecimal型をdouble型にして返します。
package test1;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* BigDecimalのdivideメソッドのサンプル
*/
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
// 割り算 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 → -3RoundingMode.DOWN 0に近づくように丸めます。切り捨てする時に指定します。
例:小数第一位で指定した場合
2.1 → 2
-2.1 → -2 - 以下はJava8 API仕様のRoundingMode型のリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/RoundingMode.html
関連の記事
Java 小数点以下の切り上げのサンプル(setScale)
Java 小数点以下の切り捨てのサンプル(setScale)
Java 小数点以下の四捨五入のサンプル(setScale)
Java 小数第一位で切り上げるサンプル(ceil)
Java 小数第一位で切り捨てるサンプル(floor)
Java 小数第一位で四捨五入するサンプル(round)
Java 数値と文字列の変換のサンプル(valueOf)