BigDecimal 은 어떻게 크기 를 비교 합 니까?

2535 단어 자바BigDecimal
BigDecimal 은 자바 에서 정확하게 계산 한 클래스 입 니 다.다음은 두 개의 BigDecimal 대상 의 크기,동일 한 판단 을 말씀 드 리 겠 습 니 다.
        일반적인 대상 은 equals 를 사용 하지만 BigDecimal 은 비교적 특수 하 다.예 를 들 어:
BigDecimal a=BigDecimal.valueOf(1.0);
BigDecimal b=BigDecimal.valueOf(1.000);

        현실 에서 이 두 숫자 는 같 지만 a.equals(b)로 결과 가 false 라면;왜 안 같 지?equals 는 비교 내용 이기 때문에'1.0'과'1.000'은 당연히 다르다.
        해결 방법:if(a.com pareto(b)==0)결 과 는 true 입 니 다.
실례 1:
package com.bijian.test;

import java.math.BigDecimal;

public class Test {

    public static void main(String[] args) {
        
        BigDecimal a = new BigDecimal("10.00");
        BigDecimal b = new BigDecimal("10");
        BigDecimal c = new BigDecimal(10.00);
        
        //equals  
        System.out.println(a.equals(b)); //false
        System.out.println(a.equals(c)); //false
        
        //toPlainString equals
        System.out.println(a.toPlainString().equals(b.toPlainString())); //false
        System.out.println(a.toPlainString().equals(c.toPlainString())); //false
        
        //longValue  
        System.out.println(a.longValue() == b.longValue()); //true
        System.out.println(a.longValue() == c.longValue()); //true
        
        //compareTo
        System.out.println(a.compareTo(b) == 0); //true
        System.out.println(a.compareTo(c) == 0); //true
    }
}

        실례 를 들 어 보면 롱 밸 류 방식 도 괜 찮 을 것 같 습 니 다.실례 2 를 계속 봅 시다.
실례 2:
package com.bijian.test;

import java.math.BigDecimal;

public class Test02 {

    public static void main(String[] args) {
        
        BigDecimal d = new BigDecimal("10.100001");
        BigDecimal e = new BigDecimal(10.100001);
        
        System.out.println(e.equals(d)); //false
        System.out.println(e.toPlainString().equals(d.toPlainString())); //false
        System.out.println(e.longValue() == d.longValue()); //true
        System.out.println(e.compareTo(d) == 0); //false
    }
}

  왜 compare To 방법 은 안 되 고 longValue 방식 은 OK 입 니까?Debug 해 봅 시다.
         Debug 에서 우 리 는 BigDecimal d=new BigDecimal("10.100001")을 발견 했다.BigDecimal e=new BigDecimal(10.100001);나 온 두 상 대 는 실제로 달 랐 고 롱 밸 류(longValue)이후 모두 10 이 됐다.

좋은 웹페이지 즐겨찾기