2016-01-08 4 views
23

У меня есть класс домена с unitPrice, установленный как тип данных BigDecimal. Теперь я пытаюсь создать метод сравнения цены, но похоже, что у меня нет операторов сравнения в типе данных BigDecimal. Нужно ли мне менять тип данных или наоборот?Как использовать операторы сравнения, такие как>, =, <on BigDecimal

+0

так как 'BigDecimal' является' объектом', нет, это не работает. Но вы могли бы просто вычесть один из них и проверить, является ли полученное значение '<0',' == 0' или '> 0'. В противном случае вы можете пойти стандартным способом с предоставленными методами из [BigDecimal] (http://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto) – SomeJavaGuy

+2

Вот почему существует метод compareTo, который возвращает -1 , 0 или 1. В основном это ['Comparable'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html). –

ответ

32

Каждый объект класса BigDecimal имеет способ compareTo, который вы можете использовать для сравнения с другим BigDecimal. Затем сравнивается результат compareTo> 0, == 0 или < 0 в зависимости от того, что вам нужно. Прочтите документацию, и вы узнаете.

== Операторы, <, > и так далее могут быть использованы только на примитивных типов данных, как int, long, double или их классов обертки, как Integer и Double.

Из документации compareTo:

Сравнивает этот BigDecimal с указанным BigDecimal.

Два BigDecimal объекты, которые равны по величине, но имеют различный масштаб (например, 2,0 и 2,00 ) считаются равными этим методом. Этот метод предоставляется в предпочтении индивидуальным методам для каждого из шести логических операторов сравнения (<, ==,>,> =,! =, < =). Предлагаемая идиома для , выполняющая эти сравнения, составляет: (x.compareTo(y) <op> 0), где <op> является одним из шести операторов сравнения.

Возвращает: -1, 0 или 1, так как этот BigDecimal численно меньше, равен или больше val.

+0

Но метод compareTo помогает найти то, будет ли цена больше, равна или ниже? – user3127109

+1

Да. Эта информация содержится в ссылке, приведенной в ответе. –

+0

@ user3127109 yes, 'a.compareTo (b)' возвращает число больше нуля, если 'a> b',' 0', если 'a == b', и меньше нуля, если' a

12

Используйте compareTo метод BigDecimal:

общественного ИНТ CompareTo (BigDecimal вал) сравнивает это BigDecimal с указанной BigDecimal.

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

BigDecimal не примитивный, так что вы не можете использовать <, > операторов. Однако, так как это Comparable, вы можете использовать compareTo(BigDecimal) с тем же эффектом. Например .:

public class Domain { 
    private BigDecimal unitPrice; 

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

    // etc... 
} 
2

Вы можете использовать метод с именем compareTo, x.compareTo(y). Она возвращает 0, если х и у равны, 1, если х больше у и -1, если х меньше, чем у

5

Для того, чтобы быть коротким:

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

Использование com.ibm.etools. marshall.util.BigDecimalRange Использовать класс IBM можно сравнить, если BigDecimal в диапазоне.

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