unitPrice가 BigDecimal 데이터 유형으로 설정된 도메인 클래스가 있습니다. 이제 가격을 비교하는 방법을 만들려고하는데 BigDecimal 데이터 유형에 비교 연산자를 사용할 수없는 것 같습니다. 데이터 유형을 변경해야합니까? 아니면 다른 방법이 있습니까?
답변
Class의 모든 객체에는 다른 BigDecimal과 비교하는 데 사용할 수 BigDecimal
있는 메소드가 compareTo
있습니다. 의 결과는 compareTo
다음 비교한다 > 0
, == 0
또는 < 0
당신이 필요에 따라 달라집니다. 문서를 읽으면 알게 될 것입니다.
연산자는 ==
, <
, >
등이 단지와 같은 기본 데이터 유형을 사용할 수 있습니다 int
, long
, double
자신의 래퍼 같은 클래스 나 Integer
하고 Double
.
의 문서에서 compareTo
:
이것을 지정된와 비교
BigDecimal
합니다BigDecimal
.
BigDecimal
값이 같지만 배율이 다른 두 개체 (예 : 2.0 및 2.00)는이 방법으로 동일한 것으로 간주됩니다. 이 메서드는 6 개의 부울 비교 연산자 (<, ==,>,> =,! =, <=) 각각에 대해 개별 메서드보다 우선적으로 제공됩니다. 이러한 비교를 수행하기 위해 제안 된 관용구는 다음과 같습니다.(x.compareTo(y) <op> 0)
, 여기서는<op>
6 개의 비교 연산자 중 하나입니다.이 BigDecimal이 숫자 적으로 val보다 작거나 같거나 큰 경우 -1, 0 또는 1을 반환합니다.
답변
짧게 말하면 :
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
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)
. x와 y가 같으면 0을, x가 y보다 크면 1을, x가 y보다 작 으면 -1을 반환합니다.
답변
다음은 6 개의 모든 부울 비교 연산자 (<, ==,>,> =,! =, <=)의 예입니다.
BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);
System.out.println(big10.compareTo(big20) < -1); // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1); // false
System.out.println(big10.compareTo(big20) != -1); // false
System.out.println(big10.compareTo(big20) < 0); // true
System.out.println(big10.compareTo(big20) <= 0); // true
System.out.println(big10.compareTo(big20) == 0); // false
System.out.println(big10.compareTo(big20) >= 0); // false
System.out.println(big10.compareTo(big20) > 0); // false
System.out.println(big10.compareTo(big20) != 0); // true
System.out.println(big10.compareTo(big20) < 1); // true
System.out.println(big10.compareTo(big20) <= 1); // true
System.out.println(big10.compareTo(big20) == 1); // false
System.out.println(big10.compareTo(big20) >= 1); // false
System.out.println(big10.compareTo(big20) > 1); // false
System.out.println(big10.compareTo(big20) != 1); // true
답변
BigDecimal
은 기본 형식이 아니므로 <
, >
연산자를 사용할 수 없습니다 . 그러나이므로 동일한 효과를 Comparable
사용할 수 있습니다 compareTo(BigDecimal)
. 예 :
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
답변
IBM의 com.ibm.etools.marshall.util.BigDecimalRange util 클래스를 사용 하면 BigDecimal 이 범위 내에 있는지 비교할 수 있습니다 .
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);