==
double を比較するために使用することは、一般的に悪い考えのように思えます。
比較している数値で setScale を同じものに呼び出すことができます。
new BigDecimal ("5.50").setScale(2).equals(new BigDecimal("5.5").setScale (2))
スケールを 2 つのうち大きい方に設定します。
BigDecimal a1 = new BigDecimal("5.051");
BigDecimal b1 = new BigDecimal("5.05");
// wow, this is awkward in Java
int maxScale = Collections.max(new ArrayList() {{ a1.scale(), b1.scale()}});
System.out.println(
a1.setScale(maxScale).equals(b1.setScale(maxScale))
? "are equal"
: "are different" );
ただし、使用compareTo() == 0
するのが最善の答えです。上記の私のアプローチにおける数値の 1 つのスケールの増加は、compareMagnitude メソッドのドキュメントで次のように言及されている「不必要なインフレーション」である可能性があります。
/**
* Version of compareTo that ignores sign.
*/
private int compareMagnitude(BigDecimal val) {
// Match scales, avoid unnecessary inflation
long ys = val.intCompact;
long xs = this.intCompact;
もちろんcompareTo
、すでに実装されているため、はるかに使いやすくなっています。