programing

Big Decimal equals() 대 compare To()

goodsources 2022. 8. 28. 09:59
반응형

Big Decimal equals() 대 compare To()

간단한 테스트 클래스를 고려합니다.

import java.math.BigDecimal;

/**
 * @author The Elite Gentleman
 *
 */
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigDecimal x = new BigDecimal("1");
        BigDecimal y = new BigDecimal("1.00");
        System.out.println(x.equals(y));
        System.out.println(x.compareTo(y) == 0 ? "true": "false");
    }

}

(의식적으로) 그렇게 말할 수 있다x와 동등하다y(개체 참조가 아님) 그러나 프로그램을 실행하면 다음 결과가 나타납니다.

false
true

질문:.와의 차이는 무엇입니까?compareTo()그리고.equals()BigDecimal그거compareTo라고 판단할 수 있다x와 동등하다y?

PS: Big Decimal에는,inflate()에 대한 방법.equals()방법.무엇인가.inflate()실제로요?

답은 이 메서드의 JavaDoc에 있습니다.

와는 달리 이 메서드는 2가지로 간주됩니다.BigDecimal개체는 값과 척도가 동일한 경우에만 동일합니다(이 방법으로 비교할 때 2.0은 2.00과 동일하지 않습니다).

즉, 다음과 같습니다.equals()체크할 수 있는 것은BigDecimal오브젝트는 모든 면에서 완전히 동일합니다. compareTo()"only"는 숫자 값을 비교합니다.

이유에 대해서 equals()이렇게 동작합니다. SO 질문에서는 답변이 되어 있습니다.

Big Decimal은 equals() 메서드에 bulve() 메서드를 가지고 있는 것을 알 수 있습니다.bulge()는 실제로 어떤 역할을 합니까?

기본적으로는inflate()BigInteger.valueOf(intCompact)필요한 경우, 즉, 데이터 저장소로 저장되는 비확정 값을 생성합니다.BigInteger부터long intCompact그게 필요없다면BigInteger그리고 비확정된 값은,long BigDecimal가능한 한 오래 공간을 절약하려고 하는 것 같습니다.

저는 두 숫자(빅데모럴)를 같은 척도로 만들어 평등성을 결정하는 것이 정답이라고 생각합니다.예를 들어, 이 두 숫자가 같은가요?

1.00001 and 1.00002

음, 규모에 따라 다르죠.척도 5(소수점 5개)에서는 동일하지 않습니다.그러나 더 작은 소수점 정밀도(척도 4 이하)에서는 동일한 것으로 간주됩니다.그래서 저는 두 숫자의 척도를 동일하게 한 다음 그것들을 비교할 것을 제안합니다.

또한 이중값과 비교할 수 있습니다.

BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1");
System.out.println(a.doubleValue()==b.doubleValue());

언급URL : https://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto

반응형