Как использовать операторы сравнения, такие как, =,

У меня есть класс домена с unitPrice, установленным как BigDecimal тип данных. Теперь я пытаюсь создать метод сравнения цены, но, похоже, у меня нет операторов сравнения в BigDecimal типе данных. Должен ли я изменить тип данных или есть другой способ?

6 ответов


каждый объект класса BigDecimal метод compareTo вы можете использовать, чтобы сравнить его с другим BigDecimal. Результат по сравнению > 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.


короче говоря:

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

использовать compareTo метод BigDecimal:

public int compareTo (BigDecimal val) сравнивает этот BigDecimal с указан BigDecimal.

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

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


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

public class Domain {
    private BigDecimal unitPrice;

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

    // etc...
}

С помощью com.компания IBM.электронными инструментами.Маршалл.утиль.BigDecimalRange util класс IBM можно сравнить, если BigDecimal в ассортименте.

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