[Java] Class DecimalFormat
Java형식화 클래스
원하는 형식으로 표현 또는 변환하기 위해서 패턴을 정의한다.
형식화된 데이터에서 원래의 데이터를 얻을 수 있다.
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 메서드는 콤마(,)가 포함된 문자열을 숫자로 변환하지 못한다.
참고 서적: 자바의 정석 3판 2