
Javaで金額を操作するための変数「BigDecimal」の基本的な操作を紹介していきます。
BigDecimalってIntegerやLongに比べるとマイナーな型なので、このページがお役に立てれば幸いです。
目次
足し算
// 足し算 ( 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
足し算 = 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
引き算 = 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
掛け算 = 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
割り算 = 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.
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
割り算 = 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
比較結果 = 1
さいごに
わたしの職場では、金額を扱う変数をLongで処理しているプログラムをごくまれにみます。
金額は必ずBigDecimalを使うようにしましょう。後々プログラムの整合性がとれて破たんするリスクが軽減します。
それでは!
この記事はお役に立てましたか?
お役に立てたことがあればシェアしていただけると嬉しいです!