[java] BigDecimal에서>, =, <와 같은 비교 연산자를 사용하는 방법

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 // ">="    


답변

compareToBigDecimal 메소드를 사용하십시오 .

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);