Java で次のコードがあります。
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
if 条件を記述する最適な方法は何ですか?
ベストアンサー1
使用compareTo(BigDecimal.ZERO)
の代わりにequals()
:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
と比較するとBigDecimal
絶え間ないBigDecimal.ZERO
実行ごとに構築する必要がなくなりますnew BigDecimal(0)
。
ちなみにBigDecimal
定数もありますBigDecimal.ONE
そしてBigDecimal.TEN
あなたの便宜のため。
注記!
使えない理由BigDecimal#equals()
規模を考慮している点です。
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
純粋に数値的な比較には適していません。しかし、BigDecimal.compareTo()
比較する際にスケールを考慮しない:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true