「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。

Javaでは浮動小数点型の数値で正確な計算結果を求める場合、BigDecimalクラスを使用する必要があります。floatやdoubleでも計算は出来ますがこれらは浮動小数点型(要は2進数で計算する)の為、小数点以下の数値が正確に表現出来ないため誤差が発生するためです。それではBigDecimalクラスの使用方法をご紹介します。

BigDecimalでの加算処理

    Javaソース

    JUnitサンプル

BigDecimalでの減算処理

    Javaソース

    JUnitサンプル

BigDecimalでの乗算処理

    Javaソース

    JUnitサンプル

BigDecimalでの除算処理

    除算する場合、BigDecimalクラスのdivideメソッド使用します。第3パラメータへ以下の丸め方法を指定する事が出来ます。
    丸め方式説明(Javadocより)
    ROUND_UP0 から離れるように丸めるモード。
    破棄される 0 以外の小数部に先行する桁を常に増やします。
    ROUND_DOWN0 に近づくように丸めるモード。
    破棄される小数部に先行する桁を増分しません (つまり切り詰め)。
    ROUND_CEILING正の無限大に近づくように丸めるモード。
    BigDecimal が正の場合は ROUND_UP のように動作し、負の場合は ROUND_DOWN のように動作します。
    ROUND_FLOOR負の無限大に近づくように丸めるモード。
    BigDecimal が正の場合は ROUND_DOWN のように動作し、負の場合は ROUND_UP のように動作します。
    ROUND_HALF_UP「もっとも近い数字」に丸めるモード。
    両隣りの数字が等距離の場合は切り上げます。破棄される小数部が 0.5 以上の場合は ROUND_UP のように動作し、それ以外の場合は ROUND_DOWN のように動作します。
    ROUND_HALF_DOWN「もっとも近い数字」に丸めるモード。
    両隣りの数字が等距離の場合は切り捨てます。破棄される小数部が 0.5 を超える場合は ROUND_UP のように動作し、それ以外の場合は ROUND_DOWN のように動作します。
    ROUND_HALF_EVEN「もっとも近い数字」に丸める丸めモード。
    両隣りの数字が等距離の場合は偶数側に丸めます。破棄する小数部の左辺の桁が奇数の場合は ROUND_HALF_UP のように動作し、偶数の場合は ROUND_HALF_DOWN のように動作します。
    ROUND_UNNECESSARY要求される演算の結果が正確であり、丸めが必要でないことを表す丸めモード。
    この丸めモードが結果が正確でない演算で指定される場合は、ArithmeticException がスローされます。

    Javaソース

    JUnitサンプル

Ads by Google

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">