Java BigDecimalで比較する方法 - BigDecimalクラス
JavaでBigDecimalを使って比較する方法です。
扱いの難しい BigDecimal
クラスですが、比較にも注意が必要です。
文字列の比較には、皆さん equals
を利用していますよね?BigDecimal
で同じように equals
を利用して比較するとハマりますのでご注意ください。
ここでは JavaでBigDecimalを使って比較する方法 を紹介します。
BigDecimal型を比較するサンプル
BigDecimal 型の性質上、1
と 1.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.ZERO
や BigDecimal.ONE
も用意されています。
// 0 と等しい場合
if (zero.compareTo(BigDecimal.ZERO) ) == 0
System.out.println("hogehoge");
こんな感じで比較も可能です。
ちなみに「Java BigDecimal 足し算, 引き算, 掛け算, 割り算そして四捨五入する方法」も解説がありますので、気になる方は下記のリンクからどうぞ。
おつかれさまでした。