У меня есть класс домена с unitPrice, заданный как тип данных BigDecimal. Теперь я пытаюсь создать метод сравнения цены, но похоже, что у меня нет операторов сравнения в типе данных BigDecimal. Нужно ли мне менять тип данных или есть другой способ?
Как использовать операторы сравнения, такие как>, =, <на BigDecimal
Ответ 1
Каждый объект класса 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.
Ответ 2
Используйте метод 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.
Ответ 3
BigDecimal не является примитивным, поэтому вы не можете использовать операторы <, >. Однако, поскольку это Comparable, вы можете использовать compareTo(BigDecimal) с тем же эффектом. Например:.
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Ответ 4
Короче:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
Ответ 5
Вы можете использовать метод с именем compareTo, x.compareTo(y). Он будет возвращать 0, если x и y равны, 1, если x больше y и -1, если x меньше y