본문 바로가기

web/JSP

java 금액 치환

일반적인 int 형 이나 long 형에 대한 금액 치환은 소스가 너무나 많다. 
but 소수점으로 된 숫자, - 가 있는 숫자, 혹은 범위가 넘어서는 큰수에 대한 치환이 없어서 -_- 만들어버렸다.;;

먼저 치환할 숫자를 보면 

String s_str= "-9999999999999999999.999999999999999999";

숫자야 더 커도 상관없다. String형이기 때문에 몇십만줄을 써도 치환이 가능하다.
또한 소수점까지 있는것을 볼수 있다.(이것이 가장 큰 이유인데 int 형과 long 형은 소수점 표현이 않된다. 
소수점 표기가 되는 형태는 float 와 double 형 이지만 실수형으로 표기되기 때문에 금액하고는 맞지가 않다.)

이제 치환되는 함수


String InsertComma(String Source){
  String sReturn = "";
  String sTemp = Source;
  boolean point = false;
  int i = 0;
  int j = 0;
  if(sTemp.indexOf(".") != -1){
      i = sTemp.indexOf(".")-1;
      point = true;
  }else{
      i = (sTemp.length()-1);
  }
 
  for( ; i>=0; i--){
    if((j%3 == 0) && (j!=0)){
      sReturn =  sTemp.substring(i, i+1) + "," + sReturn;
    }
    else{
      sReturn = sTemp.substring(i, i+1) + sReturn;
    }

    j++;
  }

  /*==================================================
  '-,123,456' 과 같은 경우 마이너스 다음의 쉼표를 제거한다.
  ===================================================*/
  sReturn = replace(sReturn, "-,", "-");
  if(point == true){
      sReturn+=   sTemp.substring(sTemp.indexOf("."), sTemp.length());
  }
  return sReturn;
}

public static String replace(String strTarget, String strSearch, String strReplace) {
    String strCheck = new String(strTarget);
    StringBuffer strBuf = new StringBuffer();

    while(strCheck.length() != 0) {
      int begin = strCheck.indexOf(strSearch);
      if(begin == -1) {
        strBuf.append(strCheck);
        break;
      }
      else {
        int end = begin + strSearch.length();
        strBuf.append(strCheck.substring(0, begin));
        strBuf.append(strReplace);
        strCheck = strCheck.substring(end);
      }
    }
    return new String(strBuf);
  }


InsertComma(s_str) 을 해보시면 이제 원하는 금액 치환을 얻을수 있을것이다.

'web > JSP' 카테고리의 다른 글

JSP stack  (2) 2011.05.04
Date.getYear()를 쓰지 말자.  (0) 2011.04.14
jsp procedure CURSOR  (0) 2011.02.19
서버 시간 알아내기  (0) 2011.02.15
jsp java.lang.UnsupportedClassVersionError 자바빈 500 에러  (0) 2011.01.25