У меня есть класс домена с 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