DecimalFormat 클래스
우리의 일상에서 가장 많이 쓰이는 진수, 10진수를 형식화하는 역할을 하는 클래스가 JAVA에서 DecimalFormat이라는 클래스입니다. 이 클래스는 NumberFormat을 상속하고 있는 클래스이죠. 10진수를 다양한 형식에 맞게 출력해줄 수 있습니다. C언어에서는 이미 fprintf 등이 그 역할을 담당하고 있죠. 이제부터 어떻게 사용되는지 배워보도록 하겠습니다.
Decimal Pattern 적용
DecimalFormat은 java.text 패키지안에 존재하므로 따로 import를 해야합니다. DecimalFormat은 문자 '#'과 '0'이 숫자를 나타내는데 쓰이며 쉼표(,), 마침표(.), 대시(-) 등으로 숫자 형식을 나타낼 수 있습니다. 많이 사용패턴은 아래의 표에 정리해놓았습니다.
Format | 설명 |
0 | 10진수, 값이 없는 자리는 0으로 채움 |
# | 10진수, 값이 없는 자리는 나타나지 않음 |
. | 소수점을 이하 나타냄 |
- | 음수 부호를 나타냄 |
, | 단위 구분자를 나타냄 |
E | 지수 기호를 나타냄, E 이후 0를 써서 표현(ex E0) |
% | 퍼센트 기호 |
' | escape문자, 만약 #을 문자로 나타내고 싶다면 '#' 으로 표현 |
그외 문자 | 문자로 취급 |
DecimalFormat을 사용하는 방법은 생성자를 통해서 형식을 지정해주는 방법이 있습니다. 아래처럼 말이죠.
DecimalFormat format=new DecimalFormat("###,###.#######");
또는 applyPattern을 사용하여 패턴을 적용할 수 있습니다.
format.applyPattern("###,###.#######");
중요한것은 우리가 패턴을 적용하고 난 후 형식에 맞는 문자열을 뽑아와야합니다. 이때 format이라는 메소드를 사용하지요. 아래와 같이 사용합니다.
double n = 11223344.5678;
String formattedStr = format.format(n);
패턴과 사용예
DecimalFormat의 사용법은 어렵지 않습니다. 주로 사용하는 방식은 패턴을 지정하고 난 후 format으로 지정된 형식을 가진 숫자 형식 문자열을 가져오는 용도가 대부분입니다. 아래의 코드를 통해서 어떻게 출력되는지 확인해보세요.
public static void main(String[] ar){
DecimalFormat format=new DecimalFormat();
String patterns[]= {
"0",
"#",
"0.0",
"000.000", //소수점
"000,000,000.0",
"000,000,000.000",
"000,000,000.000000", //숫자가 나타나지 않는 경우 나머지 빈자리를 0으로 채워줌
"#,#,#,#.###", //한글자씩 ,이 붙어서 나옴
"###,###,###.#",
"###,###,###.###",
"###,###,###.######",
"-###,###,###.######", //숫자가 나타나지 않는 경우 출력하지 않음
"###.##E0", //지수 형식으로 출력
"my number: ###.##%", //my number라는 문자열이 합쳐짐
"'#' ###,###.####", //escape로 #을 문자화
"'0' 000,000.00000000", //escape로 0을 문자화
"###,###.000000000" //섞어서도 쓸 수 있음
};
double number=1234123123.1234;
for(int i=0;i<patterns.length;i++) {
format.applyPattern(patterns[i]);
System.out.println("[pattern "+patterns[i]+"] "+format.format(number));
}
}
결과
[pattern 0] 1234123123
[pattern #] 1234123123
[pattern 0.0] 1234123123.1
[pattern 000.000] 1234123123.123
[pattern 000,000,000.0] 1,234,123,123.1
[pattern 000,000,000.000] 1,234,123,123.123
[pattern 000,000,000.000000] 1,234,123,123.123400
[pattern #,#,#,#.###] 1,2,3,4,1,2,3,1,2,3.123
[pattern ###,###,###.#] 1,234,123,123.1
[pattern ###,###,###.###] 1,234,123,123.123
[pattern ###,###,###.######] 1,234,123,123.1234
[pattern -###,###,###.######] -1,234,123,123.1234
[pattern ###.##E0] 1.2341E9
[pattern my number: ###.##%] my number: 123412312312.34%
[pattern '#' ###,###.####] # 1,234,123,123.1234
[pattern '0' 000,000.00000000] 0 1,234,123,123.12340000
[pattern ###,###.000000000] 1,234,123,123.123400000
이상으로 간단하게 DecimalFormat클래스를 소개했고 사용법을 알아보았습니다. 워낙 어렵지 않은 형식 클래스이고 편리하게 십진수를 표현할 수 있으므로 적어도 #과 0의 차이와 format() 메소드만 알고 있으면 무난히 사용할 수 있겠습니다.
'언어 > JAVA' 카테고리의 다른 글
[자바/GUI] AWT(Abstract Window Toolkit)의 기초 - Frame 클래스 (0) | 2021.04.06 |
---|---|
[자바] MessageFormat - DB query같은 메시지 형식 구현 (0) | 2021.04.06 |
[자바] 이것만 알면 예외(Exception) 정복 - 예제를 통한 개념과 예외 처리 방법 (1) | 2021.04.03 |
[Collection] Vector 완전 정복하기 - 특징과 깊이 있는 사용법 (0) | 2021.04.01 |
[Collection] 이것만 알면 해시테이블(Hashtable, Thread-Safe) 정복 가능, 사용법과 자세한 예제 (0) | 2021.03.31 |