254

私はJavaで次のコードを持っています。

BigDecimal price; // assigned elsewhere

if (price.compareTo(new BigDecimal("0.00")) == 0) {
    return true;
}

if 条件を記述する最良の方法は何ですか?

4

12 に答える 12

595

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
于 2012-06-08T14:38:44.363 に答える
113

または、signum()を使用できます。

if (price.signum() == 0) {
    return true;
}
于 2012-08-30T21:38:39.823 に答える
27

確認できる定数があります。

someBigDecimal.compareTo(BigDecimal.ZERO) == 0
于 2012-06-08T14:38:49.207 に答える
9

あるいは、クラス BigDecimal の equals メソッドと compareTo メソッドの動作が一致していないことは言及する価値があると思います。

これは基本的に次のことを意味します。

BigDecimal someValue = new BigDecimal("0.00");
System.out.println(someValue.compareTo(BigDecimal.ZERO) == 0); // true
System.out.println(someValue.equals(BigDecimal.ZERO)); // false

したがって、変数の位取りには細心の注意をsomeValue払う必要があります。そうしないと、予期しない結果が生じる可能性があります。

于 2012-06-08T14:51:14.907 に答える
5

私は通常以下を使用します:

if (selectPrice.compareTo(BigDecimal.ZERO) == 0) { ... }
于 2012-06-08T14:39:49.253 に答える
5

equals()それらはオブジェクトであるため使用し、組み込みのZEROインスタンスを利用することをお勧めします。

if (selectPrice.equals(BigDecimal.ZERO))

.equals()スケールが考慮されることに注意してください。したがって、selectPriceが同じスケール(0)でない限り.ZERO、これはfalseを返します。

方程式からスケールを取り除くには、次のようにします。

if (selectPrice.compareTo(BigDecimal.ZERO) == 0)

特定の数学的状況では、、がスケールを考慮に入れている0.00 != 0と私が想像する理由であることに注意する必要があります。100分の1の位置に精度を与えますが、それほど正確ではありません。状況によっては、に固執することをお勧めします。.equals()0.000.equals()

于 2012-06-08T14:39:58.683 に答える
0
if(price.floatValue() == 0){
   return true; //works for 0\0.0
}
于 2021-05-07T16:42:05.500 に答える
-2
BigDecimal.ZERO.setScale(2).equals(new BigDecimal("0.00"));
于 2017-04-07T08:28:55.720 に答える
-9

0を表す静的定数があります:

BigDecimal.ZERO.equals(selectPrice)

次の代わりにこれを行う必要があります。

selectPrice.equals(BigDecimal.ZERO)

の場合を避けるためselectPricenull

于 2012-06-08T14:39:08.897 に答える