J'ai une classe de domaine avec unitPrice défini comme type de données BigDecimal. Maintenant, j'essaie de créer une méthode pour comparer les prix, mais il semble que je ne peux pas avoir d'opérateurs de comparaison dans le type de données BigDecimal. Dois-je modifier le type de données ou existe-t-il un autre moyen?
Chaque objet de la classe BigDecimal
a une méthode compareTo
que vous pouvez utiliser pour le comparer à un autre BigDecimal. Le résultat de compareTo
est ensuite comparé à > 0
, == 0
ou < 0
en fonction de vos besoins. Lisez la documentation et vous le saurez.
Les opérateurs ==
, <
, >
et ainsi de suite ne peuvent être utilisés que sur des types de données primitifs tels que int
, long
, double
ou leurs classes wrapper telles que Integer
et Double
.
De la documentation de compareTo
:
Compare cette
BigDecimal
avec laBigDecimal
spécifiée.Deux
BigDecimal
les objets dont la valeur est identique mais dont l'échelle est différente (comme 2.0 et 2.00) sont considérés comme égaux par cette méthode. Cette méthode est fournie de préférence aux méthodes individuelles pour chacun des six booléens opérateurs de comparaison (<, ==,>,> =,! =, <=). L'idiome suggéré pour Effectuer ces comparaisons est:(x.compareTo(y) <op> 0)
, où<op>
est l'un des six opérateurs de comparaison.Résultats: -1, 0 ou 1, car ce BigDecimal est numériquement inférieur, égal ou supérieur à val.
Pour être court:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
Utilisez la méthode compareTo
de BigDecimal:
public int compareTo (BigDecimal val) Compare ce BigDecimal avec le spécifié BigDecimal.
Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
Vous pouvez utiliser la méthode nommée compareTo
, x.compareTo(y)
. Il retournera 0 si x et y sont égaux, 1 si x est supérieur à y et -1 si x est inférieur à y
BigDecimal
n'est pas une primitive, vous ne pouvez donc pas utiliser les opérateurs <
, >
. Cependant, puisqu'il s'agit d'une Comparable
, vous pouvez utiliser le compareTo(BigDecimal)
dans le même sens. Par exemple.:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Voici un exemple pour les six opérateurs de comparaison booléens (<, ==,>,> =,! =, <=):
BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);
System.out.println(big10.compareTo(big20) < -1); // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1); // false
System.out.println(big10.compareTo(big20) != -1); // false
System.out.println(big10.compareTo(big20) < 0); // true
System.out.println(big10.compareTo(big20) <= 0); // true
System.out.println(big10.compareTo(big20) == 0); // false
System.out.println(big10.compareTo(big20) >= 0); // false
System.out.println(big10.compareTo(big20) > 0); // false
System.out.println(big10.compareTo(big20) != 0); // true
System.out.println(big10.compareTo(big20) < 1); // true
System.out.println(big10.compareTo(big20) <= 1); // true
System.out.println(big10.compareTo(big20) == 1); // false
System.out.println(big10.compareTo(big20) >= 1); // false
System.out.println(big10.compareTo(big20) > 1); // false
System.out.println(big10.compareTo(big20) != 1); // true
En utilisant com.ibm.etools.marshall.util.BigDecimalRange util de la classe IBM, on peut comparer si BigDecimal in.
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);