Problem 1:
For the FE_FLOATING_POINT_EQUALITY issue, you should not be comparing two float values directly with the ==
operator, since due to tiny rounding errors, the values might be semantically “equal” for your application even if the condition value1 == value2
does not hold true.
In order to fix this, modify your code as follows:
private boolean equals(final Quantity other) {
return (Math.abs(this.mAmount - convertedAmount(other)) < EPSILON);
}
Where EPSILON is a constant that you should define in your code, and represents small differences that are acceptable to your application, e.g. .0000001.
Problem 2:
For the EQ_COMPARETO_USE_OBJECT_EQUALS issue: It is strongly recommended that wherever x.compareTo(y)
returns zero, x.equals(y)
should be true
. In your code you have implemented compareTo
, but you have not overriden equals
, so you are inheriting the implementation of equals
from Object
, and the above condition is not met.
In order to fix this, override equals
(and perhaps hashCode
) in your class, so that when x.compareTo(y)
returns 0, then x.equals(y)
will return true
.