【Java】BigDecimal四則演算・四捨五入・比較する方法

java

Javaで金額を操作するための変数「BigDecimal」の基本的な操作を紹介していきます。

BigDecimalってIntegerやLongに比べるとマイナーな型なので、このページがお役に立てれば幸いです。

[スポンサーリンク]

目次

  1. 足し算
  2. 引き算
  3. 掛け算
  4. 割り算
  5. 割り算(エラーになる演算)
  6. 割り算(四捨五入)
  7. 比較

足し算

// 足し算 ( 100.00 + 50.00 )
BigDecimal add1 = new BigDecimal("100.00");
BigDecimal add2 = new BigDecimal("50.00");
add1 = add1.add(add2);
System.out.println("足し算 = " + add1);
>実行結果
足し算 = 150.00

引き算

// 引き算 ( 100.00 - 50.00)
BigDecimal subtract1 = new BigDecimal("100.00");
BigDecimal subtract2 = new BigDecimal("50.00");
subtract1 = subtract1.subtract(subtract2);
System.out.println("引き算 = " + subtract1);
>実行結果
引き算 = 50.00

掛け算

// 掛け算 ( 100.00 * 30.00 )
BigDecimal multiply1 = new BigDecimal("100.00");
BigDecimal multiply2= new BigDecimal("30.00");
multiply1 = multiply1.multiply(multiply2);
System.out.println("掛け算 = " + multiply1);
>実行結果
掛け算 = 3000.0000

割り算

// 割り算 ( 100.00 / 50.00 )
BigDecimal divide1 = new BigDecimal("100.00");
BigDecimal divide2= new BigDecimal("50.00");
divide1 = divide1.divide(divide2);
System.out.println("割り算 = " + divide1);
>実行結果
割り算 = 2

割り算(エラーになる演算)

割り切れない演算の場合は、エラーになります。
これを回避するには四捨五入をしましょう。

// 割り算 ( 100.00 / 30.00 )
BigDecimal divide1 = new BigDecimal("100.00");
BigDecimal divide2= new BigDecimal("30.00");
divide1 = divide1.divide(divide2);
System.out.println("割り算 = " + divide1);
>実行結果
Exception in thread "main" java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result.

割り算(四捨五入)

// 割り算 ( 100.00 / 30.00 )
BigDecimal divide1 = new BigDecimal("100.00");
BigDecimal divide2= new BigDecimal("30.00");
//少数第3位で四捨五入する 
divide1 = divide1.divide(divide2, 2, BigDecimal.ROUND_HALF_UP);
System.out.println("割り算 = " + divide1);
>実行結果
割り算 = 3.33

比較

BigDecimalの比較は、compareToを使います。
比較結果が正しい場合は、0が返却され、正しくない場合は1が返却されます。
booleanではなく、int型で返却されるので気をつてください。

// 比較 ( 100.00 : 50.00 )
BigDecimal compare1 = new BigDecimal("100.00");
BigDecimal compare2= new BigDecimal("50.00");
System.out.println("比較結果 = " + compare1.compareTo(compare2));
>実行結果
比較結果 = 1

さいごに

わたしの職場では、金額を扱う変数をLongで処理しているプログラムをごくまれにみます。

金額は必ずBigDecimalを使うようにしましょう。後々プログラムの整合性がとれて破たんするリスクが軽減します。

それでは!