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
risposta
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 specificatoBigDecimal
.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.
Ma il metodo compareTo aiuta a scoprire se il prezzo è maggiore di, uguale o inferiore a? – user3127109
Sì. Questa informazione è nel link fornito nella risposta. –
@ user3127109 sì, 'a.compareTo (b)' restituisce un numero maggiore di zero se 'a> b',' 0' se 'a == b' e meno di zero se' a
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.
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...
}
È 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
essere breve:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 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);
- 1. Operatori di confronto binari su tipi generici
- 2. Confronto se BigDecimal è maggiore di zero
- 3. confronto l'overloading degli operatori
- 4. Operatori di confronto rubino? == vs. ===
- 5. Complessità degli operatori di confronto
- 6. confronto stringhe con "<" or ">" operatori (C)
- 7. linguistico per gli operatori di confronto incatenato (x <y <z)
- 8. query DynamoDB con operatori di confronto
- 9. operatori di confronto gt reverse_iterator mancanti?
- 10. Confronto tra BigDecimal e int in Java
- 11. operatori di confronto preferito di Python
- 12. Operatori di confronto mappe per funzionare chiamare
- 13. Operatori di confronto per stringhe C
- 14. Classe template che implementa operatori di confronto
- 15. Operatori di disuguaglianza Python; confronto degli elenchi
- 16. Confronto (<), uscita (<<) e assegnazione (=) per boost :: opzionale
- 17. overloading degli operatori << - C++
- 18. overloading << operatori e classi ereditate
- 19. Esiste un'interfaccia che abilita><e tutti gli altri operatori di confronto?
- 20. Differenza tra operatori di stringa + e << in Ruby
- 21. Sovraccarico operatori di confronto per diversi tipi in C++
- 22. Gli operatori di confronto e 'is' - la precedenza degli operatori in python?
- 23. Utilizzo degli operatori di confronto nello switch PHP
- 24. Perché gli operatori di confronto Javascript sono matematicamente incoerenti?
- 25. Come viene implementato BigDecimal?
- 26. Corrispondenza su tupla utilizzando l'operatore di confronto
- 27. Perché PHP ha due "diverso da" operatori (= e <>!)
- 28. List <> proprio operatore di confronto
- 29. Scala e Java BigDecimal
- 30. Confronto std :: function <>
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
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). –