unitPrice가 BigDecimal 데이터 유형으로 설정된 도메인 클래스가 있습니다. 이제 가격을 비교하는 방법을 만들려고하는데 BigDecimal 데이터 유형에 비교 연산자를 사용할 수없는 것 같습니다. 데이터 유형을 변경해야합니까? 아니면 다른 방법이 있습니까?
compareTo
-1, 0 또는 1을 반환 하는 메서드가 Comparable
있습니다. 기본적으로 .
unitPrice가 BigDecimal 데이터 유형으로 설정된 도메인 클래스가 있습니다. 이제 가격을 비교하는 방법을 만들려고하는데 BigDecimal 데이터 유형에 비교 연산자를 사용할 수없는 것 같습니다. 데이터 유형을 변경해야합니까? 아니면 다른 방법이 있습니까?
compareTo
-1, 0 또는 1을 반환 하는 메서드가 Comparable
있습니다. 기본적으로 .
답변:
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을 반환합니다.
a.compareTo(b)
제로의 경우보다 숫자 큰 반환 a > b
, 0
경우 a == b
, 및 제로보다 작은 경우를 a < b
.
다음은 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...
}
이 스레드에는 BigDecimal.compareTo (BigDecimal) 메서드가 BigDecimal 인스턴스 를 비교하는 데 사용할 수 있다는 많은 답변 이 있습니다 . BigDecimal.compareTo (BigDecimal) 메서드를 사용하여 더 이상 경험하지 않은 경우 BigDecimal 인스턴스를 만드는 방법에주의 하기 위해 추가하고 싶었습니다 . 예를 들어 ...
new BigDecimal(0.8)
정확 하지 않고 스케일이 50+ 인 BigDecimal
값 으로 인스턴스를 생성합니다 .0.8
new BigDecimal("0.8")
크리에이트 것이다 BigDecimal
값으로 인스턴스 이고 정확히 0.8
1의 배율을 가지고... 그리고 BigDecimal.compareTo (BigDecimal) 메서드 에 따르면 두 값은 소수 자릿수로 제한되지 않을 때 값이 같지 않기 때문에 같지 않은 것으로 간주됩니다 .
우선 BigDecimal
, BigDecimal(String val)
생성자가 BigDecimal.valueOf(double val)
아닌 생성 자나 메서드 를 사용하여 인스턴스 를 만들 때주의하십시오 BigDecimal(double val)
. 둘째, BigDecimal.setScale (int newScale, RoundingMode roundingMode) 메서드 를 사용하여 비교하기 전에 BigDecimal 인스턴스 의 크기를 제한 할 수 있습니다 .
BigDecimal
입니다Object
, 아니이 나던 작동합니다. 그러나 단순히 서로 하나를 빼고 결과 값이<0
,==0
또는인지 확인할 수>0
있습니다. 그렇지 않으면에서 제공 방법과 표준 길을 갈 수 의 BigDecimal