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
'programing' 카테고리의 다른 글
여러 Vue 애플리케이션, 단일 구성 요소 공유 (0) | 2022.08.28 |
---|---|
C에서 WinRT를 사용하시겠습니까? (0) | 2022.08.28 |
2개의 java.util을 비교합니다.같은 날인지 확인하는 날짜 (0) | 2022.08.28 |
경고를 수정할 수 없습니다. 중복 키가 검색되었습니다: '0'.이로 인해 업데이트 오류가 발생할 수 있습니다. (0) | 2022.08.28 |
v-for 구성 요소가 실시간으로 업데이트되지 않음 (0) | 2022.08.28 |