Java는 다른 유형의 객체를 다르게 취급합니다. 이것은 그들이 동일인을 대표한다고해도 그들이 동일하지 않다는 것을 의미합니다. BigDecimal의이 유형은 동일하며 값이 equivelent 있지만 다른 비늘 경우에도, 그들은 여전히 아니라는 것이다 대해 "특별한"무엇
는
Double d = 0.0;
Integer i = 0;
System.out.println(d + " equals " + i + " is " + (d.equals(i)));
BigDecimal bd2 = new BigDecimal("0.00");
BigDecimal bd3 = new BigDecimal("0.000");
System.out.println(bd2 + " equals " + d + " is " + (bd2.equals(d)));
System.out.println(bd2 + " equals " + bd2 + " is " + (bd2.equals(bd2)));
System.out.println(bd2 + " equals " + bd3 + " is " + (bd2.equals(bd3)));
인쇄
0.0 equals 0 is false
0.00 equals 0.0 is false
0.00 equals 0.00 is true
0.00 equals 0.000 is false
"동일"
이 방법은 compareTo를 사용하여 눈금을 조정하고 더 자연스러운 비교를 제공합니다. 당신의 BigDecimal을 사용하려는 경우 의미
System.out.println(bd2 + " compareTo " + BigDecimal.ZERO + " is " + (bd2.compareTo(BigDecimal.ZERO)));
System.out.println(bd3 + " compareTo " + BigDecimal.ZERO + " is " + (bd3.compareTo(BigDecimal.ZERO)));
인쇄
0.00 compareTo 0 is 0
0.000 compareTo 0 is 0
당신은 내가 더 간단하고 빠른 double
를 사용하는 것을 선호, 개인적으로
if(value1.compareTo(BigDecimal.ZERO) != 0 && value2.compareTo(BigDecimal.ZERO) != 0) {
를 작성해야합니다. 유일한 단점은 반올림을 직접 관리해야한다는 것입니다.
double div = value1/value2;
if (0 < div && div < SOME_UPPER_SENSIBLE_LIMIT) {
// division was ok.
System.out.printf("%.4f", div); // print with rounding.
value1/value2를 수행 할 때 value2가 0인지 아닌지를 확인하고 value1이 0이면 결과가 0이어야합니다. – Srinivas
사용하는 메소드의 javadoc에서 : "지정된 객체 **가 값과 스케일이이 BigDecimal의 것과 동일한 BigDecimal 인 경우에만 true입니다." 메서드에서 예기치 않은 결과가 발생하면 해당 메서드를 확인하십시오. –
나중에 참조 할 수 있도록 항상 [SSCCE] (http://sscce.org)를 제공하십시오. 상당히 단순한'if' 조건에는 ** 2 ** 구문 오류가 있습니다. – jlordo