31
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BigDecimalがゼロかどうか?

Last updated at Posted at 2015-06-27

※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かなー。

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

31
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?