2

Javaの変数の値が、現在大きな小数として定義されている0.00に等しいかどうかを計算しようとしています。

I have tried a variety of ways to do this including:
tempListPrice.getAmount() == 0.00;

tempListPrice.getAmount().equals(0.00);

public static final zeroed = 0.00
tempListPrice.getAmount().equals(zeroed); 

これを比較する簡単な方法を見つけるために、私はかなりのグーグルを行ったことを覚えておいてください。の値を比較して、以前に。として定義されたtempListPriceに等しいかどうかを確認するにはどうすればよいですか。0.00big decimal datatype

どうすればよいですか?(申し訳ありませんが、Javaはまったく新しいです)。

ありがとう

4

3 に答える 3

8

さて、さらに調査すると、equalsまたはcompareToが必要になります。あなたはおそらくしたい

tempListPrice.getAmount().compareTo(BigDecimal.ZERO);

また

tempListPrice.getAmount().equals(BigDecimal.ZERO);

しかし、正直なところ、どちらがプログラムのセマンティクスにより適しているかを判断する必要があります。これが難しい理由は、フロートには実際には正確に等しいという概念がなく、本質的にあいまいで近似的なエンティティであるためです。コードを注意深く見直して、これが自分の状況に有効であることを確認する必要があります。

とにかく、Javadocからの次のポイントはあなたが決定するのに十分なはずです:

(等しい)このBigDecimalを指定されたオブジェクトと比較して等しいかどうか。compareToとは異なり、このメソッドは、値とスケールが等しい場合にのみ2つのBigDecimalオブジェクトが等しいと見なします(したがって、このメソッドで比較した場合、2.0は2.00と等しくありません)。

cf.

(compareTo)このBigDecimalを指定されたBigDecimalと比較します。このメソッドでは、値は等しいがスケールが異なる2つのBigDecimalオブジェクト(2.0と2.00など)は等しいと見なされます。このメソッドは、6つのブール比較演算子(<、==、>、> =、!=、<=)のそれぞれに対して個別のメソッドよりも優先して提供されます。これらの比較を実行するために推奨されるイディオムは次のとおりです。(x.compareTo(y)0)、ここで、は6つの比較演算子の1つです。

于 2012-09-28T19:38:11.523 に答える
2
BigDecimal val = new BigDecimal("0.00");

BigDecimal test = new BigDecimal("0.00");

boolean isEqual = val.equals(test);

System.out.println("val " + val.toString() + " test " + test + " comp = " + isEqual);

出力

val 0.00 test 0.00 comp = true

BigDecimal val = new BigDecimal("0.000");

BigDecimal test = new BigDecimal("0.00");

boolean isEqual = val.equals(test);

System.out.println("val " + val.toString() + " test " + test + " comp = " + isEqual);

出力

val 0.000 test 0.00 comp = false

于 2012-09-28T19:44:18.540 に答える
0

以前の回答で述べたように、説明されている方法が要件を満たしていることを確認する必要があります。変数名が示すように、通貨の金額をゼロと比較している場合は、次のように金額を2つのint変数として格納することもできます(ドルを想定していますが、他の通貨でもかまいません)。

public boolean isZero (int dollars, int cents) {
    return (dollars == 0 && cents == 0);
}

要するに、BigDecimal変数はあなたの目的に必要ですか?

于 2012-09-30T16:17:32.250 に答える