Test für Gleitkomma-Gleichheit. (FE_FLOATING_POINT_EQUALITY)

Ich verwende einen Findbugs in einem ANT-Skript und kann nicht herausfinden, wie zwei meiner Fehler behoben werden. Ich habe die Dokumentation gelesen, verstehe sie aber nicht. Hier sind meine Fehler und der dazugehörige Code:

Error 1: Test auf Fließkommagleichheit. (FE_FLOATING_POINT_EQUALITY)

private boolean equals(final Quantity other) {
    return this.mAmount == convertedAmount(other);
}

Error 2: EQ_COMPARETO_USE_OBJECT_EQUALS

public final int compareTo(final Object other) {
    return this.description().compareTo(((Decision) other).description());
}

Ich habe die Dokumentation für das ComparesTo-Problem gelesen, in der angegeben ist, dass

Es wird dringend empfohlen, aber nicht unbedingt erforderlich, dass (x.compareTo (y) == 0) == (x.equals (y)). Im Allgemeinen sollte jede Klasse, die die Comparable-Schnittstelle implementiert und gegen diese Bedingung verstößt, diese Tatsache eindeutig anzeigen. Die empfohlene Sprache lautet "Hinweis: Diese Klasse hat eine natürliche Reihenfolge, die nicht mit gleich übereinstimmt."

und auch die Dokumentation zur Gleitkomma-Gleichheit

Diese Operation vergleicht zwei Gleitkommawerte auf Gleichheit. Da bei Gleitkommaberechnungen möglicherweise gerundet wird, sind die berechneten Gleit- und Doppelwerte möglicherweise nicht genau. Verwenden Sie für genaue Werte, z. B. monetäre Werte, einen Typ mit fester Genauigkeit, z. B. BigDecimal. Bei Werten, die nicht genau sein müssen, sollten Sie einen Vergleich auf Gleichheit in einem bestimmten Bereich in Betracht ziehen, z. B .: if (Math.abs (x - y) <.0000001). Siehe Java-Sprachspezifikation, Abschnitt 4.2.4.

Ich verstehe es aber nicht. Kann mir jemand bitte helfen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage