java 에서 숫자값을 갖는 object를 int나 long으로 형변환 해 주는 유틸 클래스(NumberUtility) 샘플 코드 (자작)

By | 2월 23, 2015

 
 

public class NumberUtility {
	private static final Log LOG = LogFactory.getLog(NumberUtility.class);
	public static final BigDecimal	 INT_MIN_IN_BIGDECIMAL = new BigDecimal(Integer.MIN_VALUE);
	public static final BigDecimal	 INT_MAX_IN_BIGDECIMAL = new BigDecimal(Integer.MAX_VALUE);
	public static final BigDecimal	 LONG_MIN_IN_BIGDECIMAL = new BigDecimal(Long.MIN_VALUE);
	public static final BigDecimal	 LONG_MAX_IN_BIGDECIMAL = new BigDecimal(Long.MAX_VALUE);
	/**
	 * 생성 금지
	 */
	private NumberUtility(){}
	/**
	 * Object를 매개변수로 받아서 int로 리턴한다.<br>
	 * <br>
	 * float나 double이 들어올 경우에는 소수점 이하의 숫자가 버려진다.<br>
	 * <br>
	 * @param src
	 * @return
	 */
	public static int convertInt(Object src){
		if(isZeroValue(src)){ return 0; }
		BigDecimal b = castBigDecimal(src);
		//유효한 범위를 벗어난 casting은 잘못된 값을 반환하게 되므로 exception을 throw 한다.
		if (b.compareTo(INT_MIN_IN_BIGDECIMAL) < 0 || b.compareTo(INT_MAX_IN_BIGDECIMAL) > 0) {
			throw new IllegalArgumentException("int range exceed: " + String.valueOf(b));
	    }
		return b.intValue();
	}
	/**
	 * Object를 매개변수로 받아서 long으로 리턴한다.<br>
	 * <br>
	 * float나 double이 들어올 경우에는 소수점 이하의 숫자가 버려진다.<br>
	 * <br>
	 * @param src
	 * @return
	 */
	public static long convertLong(Object src){
		if(isZeroValue(src)){ return 0; }
		BigDecimal b = castBigDecimal(src);
		//유효한 범위를 벗어난 casting은 잘못된 값을 반환하게 되므로 exception을 throw 한다.
		if (b.compareTo(LONG_MIN_IN_BIGDECIMAL) < 0 || b.compareTo(LONG_MAX_IN_BIGDECIMAL) > 0) {
			throw new IllegalArgumentException("long range exceed: " + String.valueOf(b));
	    }
		return b.longValue();
	}
	/**
	 * Object를 BigDecimal로 변환하여 리턴한다.<br>
	 * <br>
	 * 	- src가 null 이 아니라는 전제 하에 수행한다.<br>
	 * <br>
	 * @param src
	 * @return
	 */
	private static BigDecimal castBigDecimal(Object src){
		BigDecimal b = null; //정수형 데이터의 유효범위를 비교하기 위해서 가장 범위가 넓은 BigDecimal 객체로 형변환한다.
		if(src instanceof BigDecimal) {
			b = (BigDecimal)src;
		}else{
			b = new BigDecimal(src.toString());
		}
		if(LOG.isTraceEnabled()) {
			LOG.trace("## NumberUtility.castBigDecimal(): "+String.valueOf(b));
		}
		return b;
	}
	/**
	 * 인수로 들어온 값이 숫자상으로 빈 값일 경우 true, 아닐 경우 false를 리턴한다.<br>
	 * <br>
	 * @param src
	 * @param methodName
	 * @return
	 */
	private static boolean isZeroValue(Object src){
		boolean isZero = false;
		if(src == null){
			isZero = true;
		}else if((src instanceof String) && StringUtils.isBlank((String)src)){ //빈문자 "" 일 경우
			isZero = true;
		}
		if(isZero){
			if(LOG.isTraceEnabled()) {
				LOG.trace("NumberUtility.isZeroNumber() > src is null or blank");
			}
		}
		return isZero;
	}
}

 
 
 
 
 
 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments