BigDecimal 은 어떻게 크기 를 비교 합 니까?
2535 단어 자바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 이 됐다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.