숫자 출력 형식을 지정하는 DecimalFormat 클래스
1. DecimalFormat 클래스
DecimalFormat 클래스는 10진수 관련 포맷을 설정한다. 이를 이용해 다양한 숫자 형식을 편하게 출력할 수 있다.
DecimalFormat df = new DecimalFormat(); // 10진수 관련 포맷
// 직접 형식 지정
double number = 2123.456789;
System.out.println("2123.456789 소수점 세자리 -> " + (int)(number*1000)/1000.0); // 버림
// DecimalFormat 을 이용한 형식 지정
df = new DecimalFormat("#,###.###");
System.out.println("2123.456789 소수점 세자리 -> " + df.format(number)); // 반올림
2. 숫자 지정 형식
형식 | 의미 | 예시 |
0.00 | 소수점 두자리까지 출력 | 123.456 → 123.45 |
0,000 | 천단위 구분 기호 | 123456 → 123,456 89.0 → 0,089 |
#,### | 무효의 0을 표시하지 않는 # | 123456789.0 → 123,456,789 89.0 → 89 |
#,### 원 | '원' 단위 (또는 기호) 추가 | 1234567.0 → 1,234,567 원 |
#.#% | % 표시 (백분율) | 0.8539 → 85.4% |
위와 같은 형식들을 DecimalFormat() 의 (괄호)안에 "큰 따옴표"로 묶어 형식을 지정할 수 있다.
DecimalFormat df = new DecimalFormat(); // 10진수 관련 포맷
double number = 123123.123456;
System.out.println(number); // 123123.123456
System.out.println(df.format(number)); // 123,123.123
df = new DecimalFormat("0.00"); // 소수점 두자리
System.out.println(df.format(number)); // 123123.12
df = new DecimalFormat("00000000.00000000"); // 실수 8자리, 소수점 8자리
System.out.println(df.format(number)); // 00123123.12345600
이전에 다뤘던 SimpleDateFormat 과 사용 방식은 유사하다.
그런데 하나 특이한 경우가 숫자보다 지정한 자리수가 더 많을 때 발생한다. 마지막 예시처럼 자리를 채우기 위해 0이 붙는 경우다. 이때 붙는 양식문자 0에 대해 조금 더 자세히 살펴보자.
3. 양식문자 0
양식문자 0 이란, 표시할 숫자들의 자리 표현을 뜻한다.
양식문자는 아래와 같은 규칙을 따른다.
- 표시할 숫자가 많으나 0의 개수가 모자르면, 필요한 만큼 0의 개수를 추가 적용한다
- 숫자 자리수보다 0의 개수가 많으면, 많은 만큼 0으로 채워서 표시한다
- 소수점 아래에 대해서는 표시할 숫자가 많으나 0의 개수가 모자르면, 0의 개수만큼만 소수점 아래 자리수를 표시한다
- 소수점 자리수보다 0의 개수가 많으면, 많은 만큼 0으로 채워서 표시한다
자세한 예시로 살펴보자.
DecimalFormat df = new DecimalFormat();
double number = 12345.7894;
df = new DecimalFormat("0.00");
System.out.println("0.00 : " + number + " --> " + df.format(number));
df = new DecimalFormat("0.000000");
System.out.println("0.000000 : " + number + " --> " + df.format(number));
DecimalFormat df = new DecimalFormat();
double number = 1234567.0;
// "," 천단위 구분기호
df = new DecimalFormat("0,000");
System.out.println("0,000 : " + number + " --> " + df.format(number));
number = 89.0;
System.out.println("0,000 : " + number + " --> " + df.format(number));
4. 0을 표시하지 않는 #
형식에 양식문자 0 대신 #을 넣게되면, 0을 사용하지 않게 된다.
DecimalFormat df = new DecimalFormat();
double number = 1234567.0;
// 무효의 0을 표시하지 않는 #을 0 대신 사용
df = new DecimalFormat("#,###");
System.out.println("#,### : " + number + " --> " + df.format(number));
number = 1234589.0;
System.out.println("#,### : " + number + " --> " + df.format(number));
형식에 단위나 기호를 붙여서 표시할 수도 있다.
DecimalFormat df = new DecimalFormat();
number = 1234589.0;
// 단위 또는 기호 등이 추가돼서 표시
df = new DecimalFormat("#,### 원");
System.out.println("#,### 원 : " + number + " --> " + df.format(number));
df = new DecimalFormat("\\ #,###");
System.out.println("\\ #.### : " + number + " --> " + df.format(number));
'Backend > Java' 카테고리의 다른 글
[JAVA] 스레드(Thread)와 멀티스레드(Multi Thread) 구현 (0) | 2024.10.22 |
---|---|
[JAVA] 예외(Exception) 처리 (0) | 2024.10.22 |
[JAVA] 날짜 출력 형식 지정을 위한 SimpleDateFormat 클래스 (0) | 2024.10.21 |
[JAVA] 날짜와 시간 출력을 위한 Calendar, Date 클래스 (0) | 2024.10.20 |
[JAVA] HashSet, HashMap, Hashtable 그리고 Iterator (0) | 2024.10.18 |