※Qiita始めたのでHatenaやめようと思ったので昔の写しです。
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かなー。
-
日本語にしたらそれぞれcompareToは「ZEROと比べて差がないなら0」signumは「符号がなければ0」だから前者の方がまだマシかと。 ↩