У меня есть класс домена с unitPrice, установленный как тип данных BigDecimal. Теперь я пытаюсь создать метод сравнения цены, но похоже, что у меня нет операторов сравнения в типе данных BigDecimal. Нужно ли мне менять тип данных или наоборот?Как использовать операторы сравнения, такие как>, =, <on BigDecimal
ответ
Каждый объект класса 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.
Но метод compareTo помогает найти то, будет ли цена больше, равна или ниже? – user3127109
Да. Эта информация содержится в ссылке, приведенной в ответе. –
@ user3127109 yes, 'a.compareTo (b)' возвращает число больше нуля, если 'a> b',' 0', если 'a == b', и меньше нуля, если' a
Используйте compareTo
метод BigDecimal:
общественного ИНТ CompareTo (BigDecimal вал) сравнивает это BigDecimal с указанной BigDecimal.
Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
BigDecimal
не примитивный, так что вы не можете использовать <
, >
операторов. Однако, так как это Comparable
, вы можете использовать compareTo(BigDecimal)
с тем же эффектом. Например .:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Вы можете использовать метод с именем compareTo
, x.compareTo(y)
. Она возвращает 0, если х и у равны, 1, если х больше у и -1, если х меньше, чем у
Для того, чтобы быть коротким:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
Использование com.ibm.etools. marshall.util.BigDecimalRange Использовать класс IBM можно сравнить, если BigDecimal в диапазоне.
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
так как 'BigDecimal' является' объектом', нет, это не работает. Но вы могли бы просто вычесть один из них и проверить, является ли полученное значение '<0',' == 0' или '> 0'. В противном случае вы можете пойти стандартным способом с предоставленными методами из [BigDecimal] (http://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto) – SomeJavaGuy
Вот почему существует метод compareTo, который возвращает -1 , 0 или 1. В основном это ['Comparable'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html). –