사용자 도구

사이트 도구


java:number

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
java:number [2015/07/10 18:04]
kwon37xi [숫자들 간의 Type 무시 비교 / Comparing numbers]
java:number [2015/07/13 13:59]
kwon37xi [숫자들 간의 Type 무시 비교 / Comparing numbers]
줄 5: 줄 5:
 <code java> <code java>
 public int compare(final Number x, final Number y) { public int compare(final Number x, final Number y) {
-    if(isSpecial(x) || isSpecial(y))+    if(isSpecial(x) || isSpecial(y)) {
         return Double.compare(x.doubleValue(), y.doubleValue());         return Double.compare(x.doubleValue(), y.doubleValue());
-    else+    else 
 +        // x, y의 class가 동일하다면 y.compareTo(y) 만하도록 처리하면 성능이 좋아질 수 있다. 
 +        // x, y의 class가 다를 경우에만 BigDecimal로 변환한다.
         return toBigDecimal(x).compareTo(toBigDecimal(y));         return toBigDecimal(x).compareTo(toBigDecimal(y));
 +    }
 } }
  
줄 28: 줄 31:
         return new BigDecimal(number.longValue());         return new BigDecimal(number.longValue());
     if(number instanceof Float || number instanceof Double)     if(number instanceof Float || number instanceof Double)
-        return new BigDecimal(number.doubleValue());+        // float,double은 toString을 통해 변환하는 것이 정확도가 더 높았다. 
 +        return new BigDecimal(number.toString());
  
     try {     try {
줄 40: 줄 44:
 </code> </code>
   * ''isSpecial''이 없으면 ''Float''과 ''Double''의 NaN, infinite 상태에서 ''NumberFormatException''이 발생한다.   * ''isSpecial''이 없으면 ''Float''과 ''Double''의 NaN, infinite 상태에서 ''NumberFormatException''이 발생한다.
 +  * 비교 대상이 되는 두 객체가 동일 클래스 인스턴스라면 ''BigDecimal''로 변환하지 말고 즉시 비교하고 리턴하는 코드를 추가할 것. 그러면 불필요한 객체 생성 변환이 없어 성능향상이 될 것으로 보인다.
   * 특수한 숫자 객체를 제외한 int 계열의 숫자는 바로 ''BigDecimal''로 변환한다.   * 특수한 숫자 객체를 제외한 int 계열의 숫자는 바로 ''BigDecimal''로 변환한다.
java/number.txt · 마지막으로 수정됨: 2021/02/17 00:09 저자 kwon37xi