【Java】BigDecimalを使って小数点以下の計算を正確に行う!

小数点以下の計算を正確に行う場合にはBigDecimalクラスを使用します。

例えば、BigDecimalクラスを使わずに少数を計算すると以下のようになります。

出力結果

7908.499999999999

このように少数を扱う場合、丸め誤差が発生するケースがあります。
なぜこうなるのかというと、Javaは数値を2進数で扱っていて、2進数では10進数の少数値を正確に表すことができなからです。

そのため、小数点以下を正確に扱う為には、BigDecimalクラスを使用します。

今回はBigDecimalクラスを使って以下の場合での小数点以下の計算を正確に行います。
⚫︎ 小数点以下の足し算を正確に行う場合
⚫︎ 小数点以下の引き算を正確に行う場合
⚫︎ 小数点以下の掛け算を正確に行う場合
⚫︎ 小数点以下の割り算を正確に行う場合

BigDecimalクラスとは

BigDecimalクラスとは、誤差が出ないように正確にしたい場合に使用するクラスとなります。
銀行の金額計算など、数字の誤差が許されない場合に使われます。

しかし、BigDecimallクラスによる演算は時間がかかるので、精度よりも処理速度が求められる場合はプリミティブ型を使うようにしましょう。

BigDecimalクラスの書き方

BigDecimalクラスの書き方は下記となります。

BigDecimalクラスを使用する場合はBigDecimalをインポートする必要があります。

BigDecimalクラスの計算用メソッドについて

BigDecimallクラスの主要な計算用メソッドは、次のようになります。

足し算のaddメソッド、引き算のsubtractメソッド、掛け算のmultiplyメソッド、割り算のdivideメソッドなど、いくつかの計算用メソッドが用意されています。

メソッド 演算名
BigDecimal.add 加算
BigDecimal.subtract 減算
BigDecimal.multiply 乗算
BigDecimal.divide 除算
BigDecimal.remainder 剰余算

除算を行うBigDecimalクラスのdivide()メソッドでは、正確な商の小数点以下が無限となる計算を行った場合、「ArithmeticException」例外が発生します。
その場合には、第2パラメータに丸めモードを設定して計算結果を丸めることが可能です。

小数点以下の計算を正確に行うサンプルコード

足し算の場合

出力結果

BigDecimalでの足し算: 208.17

BigDecimalクラスのaddメソッドによって小数点以下の足し算を正確に行っています。

引き算の場合

出力結果

BigDecimalでの引き算: 107.603

BigDecimalクラスのsubtractメソッドによって小数点以下の引き算を正確に行っています。

掛け算の場合

出力結果

BigDecimalでの掛け算: 7908.50

BigDecimalクラスのmultiplyメソッドによって小数点以下の掛け算を正確に行っています。

割り算の場合

出力結果

BigDecimalでの割り算: 3.1634

BigDecimalクラスのdivideメソッドによって小数点以下の割り算を正確に行っています。

今回のポイント

BigDecimalクラスで計算を正確に行う

乱数を取得するにはMathクラスのrandom()メソッドを使用する。

⚫︎ BigDecimalクラスで小数を扱う演算の丸め誤差を正確に求めることができる

⚫︎ BigDecimalクラスには、足し算のaddメソッド、引き算のsubtractメソッド、掛け算のmultiplyメソッド、割り算のdivideメソッドを始め、いくつかの計算用メソッドがある

⚫︎ BigDecimallクラスによる演算は時間がかかるため、精度よりも処理速度が求められる場合はプリミティブ型を使用する

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し