web-dev-qa-db-fra.com

Comment utiliser des opérateurs de comparaison comme>, =, <sur BigDecimal

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?

55
user3127109

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 Integeret Double.

De la documentation de compareTo:

Compare cette BigDecimal avec la BigDecimal 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.

69
Simulant

Pour être court: 

firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"    
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="  
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="    
57
torina

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.
19
Arnaud

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

9
Agung Setiawan

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...
}
5
Mureinik

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
0
ognjenkl

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);
0
Alexey