Java BigDecimalで比較する方法 - BigDecimalクラス

JavaでBigDecimalを使って比較する方法です。

JavaでBigDecimalを使って比較する方法

扱いの難しい BigDecimal クラスですが、比較にも注意が必要です。

文字列の比較には、皆さん equals を利用していますよね?BigDecimal で同じように equals を利用して比較するとハマりますのでご注意ください。

ここでは JavaでBigDecimalを使って比較する方法 を紹介します。


BigDecimal型を比較するサンプル

BigDecimal 型の性質上、11.0 は別のものです。ここに落とし穴があります。同じだと思って、equals で比較してしまうと不具合が発生します。実際にサンプルを見てみましょう。


BigDecimal first = new BigDecimal("1");
BigDecimal second = new BigDecimal("1.0");

if ( first.equals(second) )
    System.out.println("true");
else
    System.out.println("false");

結果はこうなります。


false

では、BigDecimal型を正しく比較するためにはどのようにすればいいのでしょうか?正しい比較の方法としては、compareTo を利用します。これも比較用のメソッドです。

実際にサンプルを見てみましょう。


if ( first.compareTo(second) == 0 )
    System.out.println("true");
else
    System.out.println("false");

結果はこうなります。


true

注意点として compareTo メソッドの戻り値は必ず 0 と比較する必要があります。0 と比較することにより比較演算子( <、==、>、>=、!=、<= )の全てが使用できるようになります。

サンプルを見てみましょう。


BigDecimal zero = new BigDecimal("0");
BigDecimal one = new BigDecimal("1");
BigDecimal minus = new BigDecimal("-1");

if ( zero.compareTo(one) < 0 )
    System.out.println("比較演算子[ <  ]: true");

if ( one.compareTo(one) == 0 )
    System.out.println("比較演算子[ == ]: true");

if ( zero.compareTo(minus) > 0 )
    System.out.println("比較演算子[ >  ]: true");

if ( zero.compareTo(minus) >= 0 )
    System.out.println("比較演算子[ >= ]: true");

if ( zero.compareTo(minus) != 0 )
    System.out.println("比較演算子[ != ]: true");

if ( zero.compareTo(one) <= 0 )
    System.out.println("比較演算子[ <= ]: true");

結果はこうなります。


比較演算子[ <  ]: true
比較演算子[ == ]: true
比較演算子[ >  ]: true
比較演算子[ >= ]: true
比較演算子[ != ]: true
比較演算子[ <= ]: true

BigDecimal 型には、BigDecimal.ZEROBigDecimal.ONE も用意されています。


// 0 と等しい場合
if (zero.compareTo(BigDecimal.ZERO) ) == 0
    System.out.println("hogehoge");

こんな感じで比較も可能です。

ちなみに「Java BigDecimal 足し算, 引き算, 掛け算, 割り算そして四捨五入する方法」も解説がありますので、気になる方は下記のリンクからどうぞ。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。