2016-01-08 61 views
23

Ho una classe di dominio con unitPrezzo impostato come tipo di dati BigDecimal. Ora sto cercando di creare un metodo per confrontare il prezzo, ma sembra che non possa avere operatori di confronto nel tipo di dati BigDecimal. Devo cambiare il tipo di dati o c'è un altro modo?Come utilizzare operatori di confronto come>, =, <su BigDecimal

+0

poiché 'BigDecimal' è un' Oggetto', no questo non funziona. Ma potresti semplicemente sottrarre l'uno dall'altro e verificare se il valore risultante è '<0',' == 0' o '> 0'. Altrimenti si potrebbe andare nel modo standard con i metodi forniti da [BigDecimal] (http://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto) – SomeJavaGuy

+2

Questo è il motivo per cui esiste un metodo 'compareTo' che restituisce -1 , 0 o 1. Che è fondamentalmente il ['Comparable'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html). –

risposta

32

Ogni oggetto della Classe BigDecimal ha un metodo compareTo che è possibile utilizzare per confrontarlo con un altro BigDecimal. Il risultato di compareTo viene quindi confrontato con > 0, == 0 o < 0 a seconda di ciò che è necessario. Leggi la documentazione e lo scoprirai.

Gli operatori ==, <, > e così via possono essere utilizzati solo su tipi di dati primitivi come int, long, double o loro classi involucro come Integer e Double.

Dalla documentazione di compareTo:

confronta questo BigDecimal con il specificato BigDecimal.

Due BigDecimal oggetti che sono uguali in valore, ma hanno una scala diversa (come 2,0 e 2,00) sono considerati uguali con questo metodo. Questo metodo è fornito a in preferenza ai singoli metodi per ciascuno dei sei operatori di confronto booleani (<, ==,>,> =,! =, < =). L'idioma suggerito per il confronto è il seguente: (x.compareTo(y) <op> 0), dove <op> è uno dei sei operatori di confronto.

Restituzioni: -1, 0 o 1 in quanto questo BigDecimal è numericamente inferiore, uguale o superiore a val.

+0

Ma il metodo compareTo aiuta a scoprire se il prezzo è maggiore di, uguale o inferiore a? – user3127109

+1

Sì. Questa informazione è nel link fornito nella risposta. –

+0

@ user3127109 sì, 'a.compareTo (b)' restituisce un numero maggiore di zero se 'a> b',' 0' se 'a == b' e meno di zero se' a

12

utilizzare il metodo compareTo di BigDecimal:

public int compareTo (BigDecimal val) confronta questo BigDecimal con il specificato BigDecimal.

Returns: 
-1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val. 
3

BigDecimal non è un primitivo, quindi non è possibile utilizzare i <, > operatori. Tuttavia, poiché è un Comparable, è possibile utilizzare lo compareTo(BigDecimal) per lo stesso effetto. Es .:

public class Domain { 
    private BigDecimal unitPrice; 

    public boolean isCheaperThan(BigDecimal other) { 
     return unitPirce.compareTo(other.unitPrice) < 0; 
    } 

    // etc... 
} 
2

È possibile utilizzare il metodo di nome compareTo, x.compareTo(y). Esso ritorna 0 se x ed y sono uguali, 1 se x è maggiore di y e -1 se x è minore di y

5

essere breve:

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

Uso com.ibm.etools. marshall.util.BigDecimalRange classe util di IBM si può confrontare se BigDecimal nel range.

boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum); 
Problemi correlati