/ JAVAJUNGSUK

Ch10-9~12. DecimalFormat

자바의 정석 기초편

0. 목차



Chapter10. 날짜와 시간 & 형식화

Ch10 - 9. 형식화 클래스

Ch10 - 10. DecimalFormat

Ch10 - 11. DecimalFormat 예제1

Ch10 - 12. DecimalFormat 예제2



Ch10 - 9. 형식화 클래스


▶ 형식화 클래스란?

▷ java.text 패키지의 DecimalFormat, SimpleDateFormat
  • Decimal : 숫자(10진수)
  • Date : 날짜
▷ 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능
  • 숫자 → 형식 문자열
  • 날짜 → 형식 문자열
▷ double → String
double num = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0"); // 형식 문자열
String result = df.format(num);
"1.2E6"
  • 1.2E6 = 1.2 × 106
▷ String → double
DecimalFormat df = new DecimalFormat("#,###.##"); // 형식 문자열
Number num = df.parse("1,234,567.89");
double d = num.doubleValue();
1234567.89



Ch10 - 10. DecimalFormat


▶ DecimalFormat이란?

▷ 숫자(10진수)를 형식화 할 때 사용
▷ 숫자(10진수) → 형식 문자열


▷ 특정 형식의 문자열을 숫자로 변환 할 때도 사용
  • 형식 문자열 → 숫자(10진수)
      DecimalFormat df = new DecimalFormat("#,###.##"); // 형식 문자열
      Number num = df.parse("1,234,567.89"); // Number : 모든 숫자 래퍼 클래스의 최고 조상 
      double d = num.doubleValue();
    
      1234567.89
    
  • Integer.parseInt()는 콤마(,)가 포함 된 문자열을 숫자로 변환 못함



Ch10 - 11. DecimalFormat 예제1


▶ 패턴 출력

▷ 숫자 → 형식 문자열 : df.format(number)
▷ 형식 문자열 → 숫자 : df.parse(number)
public static void main(String[] args) throws Exception {
  double number  = 1234567.89;
  
  String[] pattern = {
    "0",
    "#",
    "0.0",
    "#.#",
    "0000000000.0000",
    "##########.####",
    "#.#-",
    "-#.#",
    "#,###.##",
    "#,####.##",
    "#E0",
    "0E0",
    "##E0",
    "00E0",
    "####E0",
    "0000E0",
    "#.#E0",
    "0.0E0",
    "0.000000000E0",
    "00.00000000E0",
    "000.0000000E0",
    "#.#########E0",
    "##.########E0",
    "###.#######E0",
    "#,###.##+;#,###.##-",
    "#.#%",
    "#.#\u2030",
    "\u00A4 #,###",
    "'#'#,###",
    "''#,###",
  };

  for(int i=0; i < pattern.length; i++) {
    DecimalFormat df = new DecimalFormat(pattern[i]);

    System.out.printf("%19s : %s\n",pattern[i], df.format(number));
    }
  }
}
// console
                  0 : 1234568
                  # : 1234568
                0.0 : 1234567.9
                #.# : 1234567.9
    0000000000.0000 : 0001234567.8900
    ##########.#### : 1234567.89
               #.#- : 1234567.9-
               -#.# : -1234567.9
           #,###.## : 1,234,567.89
          #,####.## : 123,4567.89
                #E0 : .1E7
                0E0 : 1E6
               ##E0 : 1.2E6
               00E0 : 12E5
             ####E0 : 123.5E4
             0000E0 : 1235E3
              #.#E0 : 1.2E6
              0.0E0 : 1.2E6
      0.000000000E0 : 1.234567890E6
      00.00000000E0 : 12.34567890E5
      000.0000000E0 : 123.4567890E4
      #.#########E0 : 1.23456789E6
      ##.########E0 : 1.23456789E6
      ###.#######E0 : 1.23456789E6
#,###.##+;#,###.##- : 1,234,567.89+
               #.#% : 123456789%
               #.#‰ : 1234567890
            ¤ #,### : ? 1,234,568
           '#'#,### : #1,234,568
            ''#,### : '1,234,568



Ch10 - 12. DecimalFormat 예제2


▶ 형식 문자열 → 숫자 → 형식 문자열

▷ 형식 문자열 → 숫자
  • df.parse(number)
▷ 숫자 → 형식 문자열
  • df.format(number)
▷ 형식 문자열 → 숫자 → 형식 문자열
  • df.parse(number) → df.format(number) → df.parse(number)
public static void main(String[] args) {
        DecimalFormat df  = new DecimalFormat("#,###.##");
        DecimalFormat df2 = new DecimalFormat("#.###E0");
        
        try {
            Number num = df.parse("1,234,567.89");
            System.out.print("1,234,567.89" + " → ");
            
            double d = num.doubleValue(); 
            System.out.print(d + " → ");
            
            System.out.println(df2.format(num));
    } catch(Exception e) {
    
    }
}

// console

// 형식 문자열 → 숫자(double) → 형식 문자열
"1,234,567.89"  1234567.89  "1.235E6"