DecimalFormat
by 민갤
형식화 클래스
원하는 형식으로 표현 또는 변환하기 위해서 패턴을 정의한다.
형식화된 데이터에서 원래의 데이터를 얻을 수 있다.
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