형식화 클래스

원하는 형식으로 표현 또는 변환하기 위해서 패턴을 정의한다.
형식화된 데이터에서 원래의 데이터를 얻을 수 있다.
package java.text에 포함되어 있다.
숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화했다.




DecimalFormat

숫자를 형식화하는 클래스.
숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있다.
일정한 형식의 텍스트 데이터를 숫자로 쉽게 변환할 수 있다.



사용법

원하는 출력형식의 패턴을 작성하여 DecimalFormat 인스턴스를 생성한다.
출력하고자 하는 문자열로 format 메서드를 호출하면 원하는 패턴에 맞게 변환된 문자열을 얻게 된다.
double number = 1234567.89;

DecimalFormat df = new DecimalFormat("#.#");
String result = df.format(number);



기호

DecimalFormat의 패턴의 작성에 사용되는 기호와 자주 사용될만한 패턴은 다음과 같다.

•   0    : 10진수. 값이 없을 때는 0
0 1234568
0.0 1234567.9
0000000000.0000 0001234567.8900
•   #    : 10진수
# 1234568
#.# 1234567.9
##########.#### 1234567.89
•   .    : 소수점
#.# 1234567.9
•   -    : 음수부호
-#.# -1234567.9
#.#- 1234567.9-
•   ,    : 단위 구분자
#,###.## 1,234,567.89
#,####.## 123,4567.89
•   E    : 지수 기호
#E0 1.23456789E6
0E0 1E6
##E0 1.23456789E6
00E0 12E5
####E0 123.456789E4
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.2345679E6
•   ;    : 패턴 구분자
#,###.##+;#,###.##- 1,234,567.89+
•   %    : 퍼센트
#.#% 123456789%
•   \u2030    : 퍼밀(퍼센트x10)
#.#\u2030 1234567890‰
•   \u00A4    : 통화
\u00A4#,### ₩1,234,568
•   '    : escape 문자
’#’#,### #1,234,568
’’#,### ‘1,234,568
double number = 1234567.89;
String pattern[] = {
        "0",                     // 1234568
        "0.0",                   // 1234567.9
        "0000000000.0000",       // 0001234567.8900
        "#",                     // 1234568
        "#.#",                   // 1234567.9
        "##########.####",       // 1234567.89
        "#.#",                   // 1234567.9
        "-#.#",                  // -1234567.9
        "#.#-",                  // 1234567.9-
        "#,###.##",              // 1,234,567.89
        "#,####.##",             // 123,4567.89
        "#E0",                   // 1.23456789E6
        "0E0",                   // 1E6
        "##E0",                  // 1.23456789E6
        "00E0",                  // 12E5
        "####E0",                // 123.456789E4
        "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.2345679E6
        "#,###.##+;#,###.##-",   // 1,234,567.89+
        "#.#%",                  // 123456789%
        "#.#\u2030",             // 1234567890‰
        "\u00A4 #,###",          // ₩ 1,234,568
        "'#'#,###",              // #1,234,568
        "''#,###"                // '1,234,568
};

for (int i = 0; i < pattern.length; i++) {
    DecimalFormat df = new DecimalFormat(pattern[i]);
    Log.d("TAG_TEST", pattern[i] + " : " + df.format(number));
}



Number parse(String source)

DecimalFormat의 조상인 NumberFormat에 정의된 메서드.
기호와 문자가 포함된 문자열을 숫자로 쉽게 변환할 수 있다.
public Number parse(String source) throws ParseException

지정된 패턴으로 입력되지 않은 경우, 호출 시 예외(ParseException)가 발생한다.
DecimalFormat df1 = new DecimalFormat("#,#####.##");
DecimalFormat df2 = new DecimalFormat("#.###E0");

try {
    Number num = df1.parse("2,01705.31");
    double d = num.doubleValue();

    Log.d("TAG_TEST", d + "");                   // 201705.31
    Log.d("TAG_TEST", df2.format(d));            // 2.017E5
}catch(Exception e){}

Integer.parseInt 메서드는 콤마(,)가 포함된 문자열을 숫자로 변환하지 못한다.




•  참고 서적: 자바의 정석 3판 2