Dico

[Java] Class DecimalFormat

형식화 클래스

원하는 형식으로 표현 또는 변환하기 위해서 패턴을 정의한다.

형식화된 데이터에서 원래의 데이터를 얻을 수 있다.

package java.text에 포함되어 있다.

숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화했다.

Class DecimalFormat

숫자를 형식화하는 클래스.

숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있다.

일정한 형식의 텍스트 데이터를 숫자로 쉽게 변환할 수 있다.

사용법

원하는 출력형식의 패턴을 작성하여 DecimalFormat 인스턴스를 생성한다.

출력하고자 하는 문자열로 format 메서드를 호출하면 원하는 패턴에 맞게 변환된 문자열을 얻게 된다.

double number = 1234567.89;

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

기호

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

  • 0    : 10진수. 값이 없을 때는 0
  • #    : 10진수
  • .    : 소수점
  • -    : 음수부호
  • ,    : 단위 구분자
  • E    : 지수 기호
  • ;    : 패턴 구분자
  • %    : 퍼센트
  • \u2030    : 퍼밀(퍼센트x10)
  • \u00A4    : 통화
  • '    : escape 문자
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]);
    System.out.println(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,01708.23");
    double d = num.doubleValue();

    System.out.println(d);                   // 201708.23
    System.out.println(df2.format(d));            // 2.017E5
} catch (Exception e) { }

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

DecimalFormat API

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