이번엔 그 로직을 살~짝(아주 살짝) 바꿔서 java 함수로 만들었다.
물론 java에서도 Math객체에서 해당 함수들을 지원하지만 몰라서 그런지 정수부분
(원단위, 십단위 등) 또는 소수부분에서의 처리가 안 되는 것 같아서 만들었다.(삽질한 거 아닌지...)
/** * 절상, 절하, 반올림 처리 * @param strMode - 수식 * @param nCalcVal - 처리할 값(소수점 이하 데이터 포함) * @param nDigit - 연산 기준 자릿수(오라클의 ROUND함수 자릿수 기준) * -2:십단위, -1:원단위, 0:소수점 1자리 * 1:소수점 2자리, 2:소수점 3자리, 3:소수점 4자리, 4:소수점 5자리 처리 * @return String nCalcVal */ public static String calcMath(String strMode, double nCalcVal, int nDigit) { if("CEIL".equals(strMode)) { //절상 if(nDigit < 0) { nDigit = -(nDigit); nCalcVal = Math.ceil(nCalcVal / Math.pow(10, nDigit)) * Math.pow(10, nDigit); } else { nCalcVal = Math.ceil(nCalcVal * Math.pow(10, nDigit)) / Math.pow(10, nDigit); } } else if("FLOOR".equals(strMode)) { //절하 if(nDigit < 0) { nDigit = -(nDigit); nCalcVal = Math.floor(nCalcVal / Math.pow(10, nDigit)) * Math.pow(10, nDigit); } else { nCalcVal = Math.floor(nCalcVal * Math.pow(10, nDigit)) / Math.pow(10, nDigit); } } else { //반올림 if(nDigit < 0) { nDigit = -(nDigit); nCalcVal = Math.round(nCalcVal / Math.pow(10, nDigit)) * Math.pow(10, nDigit); } else { nCalcVal = Math.round(nCalcVal * Math.pow(10, nDigit)) / Math.pow(10, nDigit); } } return String.valueOf(nCalcVal); }
댓글 없음:
댓글 쓰기