【Java】正確に計算するためにBigDecimalの使い方を覚えよう!
  • facebookページ
  • twitterページ
  • 2019.10.31

    【Java】正確に計算するためにBigDecimalの使い方を覚えよう!

    Javaには数値を扱う型として「float」や「double」などもありますが、小数点以下の正確な値の計算を行うためには「BigDecimal」を利用する必要があります。

    本記事では、JavaにおけるBigDecimalの基本的な使い方をご紹介していきたいと思います。

    JavaのBigDecimalとは

    ポテパンダの一言メモ

    BigDecimalは正確な計算を行うために利用されるクラスで、小数点以下の数値を扱う際、意図しない丸め処理が行われない点が特徴です。

    BigDecimalではfloatやdoubleなどのように浮動小数点でデータを保管しない

    BigDecimalでは、実数値を保存するための方法として、「整数値」と「小数点の位置」で管理する方法を採用しています。

    「float」や「double」などの「浮動小数点」でデータを管理すると、小数点以下の値が自動的に丸められプログラマーの意図しない処理結果が返却されることが起こります。

    BigDecimalでは「整数値」「小数点の位置」を別データとして管理することで、丸め誤差を起こさずに実数値の状態で保存することが可能になります。

    Java BigDecimalクラスの基本的な使い方

    ポテパンダの一言メモ

    BigDecimalクラスでは、四則演算用のメソッドが用意されており、四捨五入する際の条件や小数点以下の桁数を指定することが可能です。

    基本となる四則演算をサンプルコードで確認しよう

    まずは「足し算」「引き算」「掛け算」「割り算」の使い方をサンプルコードでご紹介していきます。

    サンプルコードを実行した結果が下記の通りとなります。

    まずBigDecimalクラスを利用するためには、※1の行でjava.mathパッケージをインポートしておく必要があります。

    ポテパンダの一言メモ

    ※2~5までがそれぞれ四則演算の処理で利用するメソッドとなっており、addは「足し算」subtractは「引き算」multiplyは「掛け算」divideは「割り算」を行うために提供されたメソッドです。

    ※5の割り算の行ではdivideメソッドの第三引数に「BigDecimal.ROUND_HALF_UP」を指定しています。

    BigDecimal.ROUND_HALF_UPは「四捨五入」することを指定する定数で、第二引数で指定した小数点以下の桁数になるように四捨五入処理が行われます。

    今回のサンプルのようにdivideメソッドを利用して割り算を行なった結果、答えが無限小数となった場合「java.lang.ArithmeticException」が起こるため、サンプルのように丸め処理を指定する必要があります。

    Java BigDecimalクラスで可能な丸め処理

    JavaのBigDecimalクラスでは、四捨五入以外の丸め処理も多く提供されているため確認しておきましょう。

    BigDecimalクラスの丸め処理で利用可能な定数一覧

    まずは下記の表で丸め処理で利用出来る定数をご確認ください。

    定数 説明
    ROUND_UP 0から離れるように丸めるモード
    ROUND_DOWN 0に近づくように丸めるモード
    ROUND_CEILING 正の無限大に近づくように丸めるモード
    ROUND_FLOOR 負の無限大に近づくように丸めるモード
    ROUND_HALF_UP もっとも近い数字に丸めるモード(両隣の数字が等距離の場合は切り上げ)
    ROUND_HALF_DOWN もっとも近い数字に丸めるモード(両隣の数字が等距離の場合は切り捨て)
    ROUND_HALF_EVEN もっとも近い数字に丸めるモード(両隣の数字が等距離の場合は偶数側に丸める)
    ROUND_UNNECESSARY 演算の結果が正確であり、丸めが必要ないことを表す丸めモード

    丸め処理の定数を使用したサンプルコードで確認しよう

    setScaleメソッドを用いて小数点第二位で丸めるサンプルコードをご紹介していきます。

    サンプルコードを実行した結果が下記の通りとなります。

    ポテパンダの一言メモ

    ROUND_UNNECESSARYに関しては、答えが無限小数になった場合「java.lang.ArithmeticException」が発生しますので、注意が必要です。

    さいごに:Java BigDecimalクラスは正確な計算を行うために必要!

    本記事では、JavaにおけるBigDecimalクラスの基本的な使い方についてご紹介してきました。

    小数点以下の計算を行う際には必須のクラスとなっていますので、これまで曖昧に「float」や「double」と「BigDecimal」を混同していた方は、ぜひこの機会にプログラムで不具合を生まないよう、しっかりとそれぞれ使い分けられるように理解しておきましょう。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE