Keep it simple, stupid!!

IT系で調べたこととか考えたこととか書くつもりです。

BigDecimalがゼロかどうか?

BigDecimalがゼロかどうかの判定が意外とめんどくさいのと、
やりかたがいろいろあるので記事書くことにしました。

ダメなやり方

BigDecimal value = new BigDecimal("0.0");
if ( value.equals(BigDecimal.ZERO) )
    System.out.println("true");
else
    System.out.println("false");

scaleが違うと一致とみなさないのでうまくいかない。
(scaleまで比較してほしいなら正しい)

よく見るやり方※1

BigDecimal value = new BigDecimal("0.0");
if ( value.compareTo(BigDecimal.ZERO)==0 )
    System.out.println("true");
else
    System.out.println("false");

これだとscale関係なく0かどうか判定で来てハッピー!

さらに、

今日見つけたやり方※2

BigDecimal value = new BigDecimal("0.0");
if ( value.signum()==0 )
    System.out.println("true");
else
    System.out.println("false");

※1と結果は同じ。
速度的にはcompareTo:signum⇒10:6ぐらいの感じだった。

ゼロかどうか?正かどうか?負かどうか?を判定するならsignum()使った方が速いっぽい。
ただ職場で使うなら何やってるかわかりやすいcompareTo使う*1かなー。

*1:日本語にしたらそれぞれcompareToは「ZEROと比べて差がないなら0」signumは「符号がなければ0」だから前者の方がまだマシかと。