[Java] 자바 DecimalFormat을 통한 다양한 숫자 포맷 알아보기!

2021-01-17


DecimalFormat은 다양한 숫자 데이터를 자신의 원하는 형식으로 나타낼 수 있도록 도와준다. 오늘은 이와 같은 클래스의 사용법을 알아보자.


package tFormat;

import java.text.DecimalFormat;

public class main {

	public static void main(String[] args) {
		// 0 10진수의 빈자리는 0으로 채운다.
		// # 10진수의 빈자리는 채우지 않는다.
		// . 소수점을 표현 ex) #.0
		
		double num = 11111.1111;
		
		DecimalFormat df = new DecimalFormat("0");
		System.out.println(df.format(num)); 
		//소숫점 표시안해주어 출력안됨
		df = new DecimalFormat("0.0");
		System.out.println(df.format(num));
		//하나만 해주어서 하나만 출력됨
	}

}

 

우선 예제는 소숫점 4자리를 가지고 있는 double 형 변수를 선언해주었다. 이후 DecimalFormat 변수를 하나 선언해 주었다. 해당 DecimalFormat의 메서드인 format을 이용해 다양한 형태로 숫자형 변수를 받아 출력을 해줄 수 있는데, 만약 객체 선언 시 단순히 "0"을 매개변수로 줄 경우 double형 변수임에도 불구하고 소수점 자리 없이 출력되고 만약 한자리만 출력하고 싶다 하면 위의 코드처럼 "0.0"을 매개변수로 주면 11111.1만 출력되는 것을 확인할 수 있다.


import java.text.DecimalFormat;

public class main {

	public static void main(String[] args) {
		// 0 10진수의 빈자리는 0으로 채운다.
		// # 10진수의 빈자리는 채우지 않는다.
		// . 소수점을 표현 ex) #.0
		
		double num = 11111.1111;
		
		DecimalFormat df = new DecimalFormat("0");
        
		df = new DecimalFormat("0000000000.00000000000");
		System.out.println(df.format(num));

	}

}

 

그러면 위와 같은 수많은 0을 매개 변수로 두고 변수를 선언하면 어떻게 될까? 어느정도 예상할 수 도 있겠지만 format메서드에 들어가는 매개변수의 총자릿수보다 객체 선언 시 들어간 매개변수의 자릿수가 더 많으면, 해당 초과되는 자릿수는 모두 0으로 채워지게 된다.


package tFormat;

import java.text.DecimalFormat;

public class main {

	public static void main(String[] args) {
		// 0 10진수의 빈자리는 0으로 채운다.
		// # 10진수의 빈자리는 채우지 않는다.
		// . 소수점을 표현 ex) #.0
		
		double num = 11111.1111;
		
		DecimalFormat df = new DecimalFormat("0");
		df = new DecimalFormat("#.#");
		System.out.println(df.format(num));
		//마찬가지로 한자리만 출력
		df = new DecimalFormat("#########.##########");
		System.out.println(df.format(num));
	}

}

 

0 뿐 아니라 #을 통해서도 숫자 포맷을 변경할 수 있는데, 이와 같은 코드는 전 0으로 표현한 포맷과는 어떤 차이가 있는지 아래 출력문을 확인해 보자.

초기 "#.#"을 매개변수로 주었을 때는 기존의 "0.0"과 차이는 없다. 다만 차이가 발생하는 부분은 객체 생성 시 발생하며, 매개변수로 들어가는 #의 수와 상관없이 format메서드에 들어가는 숫자형 변수의 자릿수에 맞추어져서 출력된다는 점이다. 


package tFormat;

import java.text.DecimalFormat;

public class main {

	public static void main(String[] args) {
		// 0 10진수의 빈자리는 0으로 채운다.
		// # 10진수의 빈자리는 채우지 않는다.
		// . 소수점을 표현 ex) #.0
		
		double num = 11111.1111;
		
		DecimalFormat df = new DecimalFormat("0");
 
 		df = new DecimalFormat("+#.0");
		System.out.println(df.format(num));
		//+ 또는 - 기호를 삽입할수도 있음 물론 다른 아무문자나 삽입가능함
		//단 중간에 문자를 삽입할 경우 그 문자가 해당 숫자 맨뒤에 붙음
	}

}

 

숫자를 표현하는 0과 #을 제외하고도 다양한 문자를 삽입할 수 있는데 예로 들자면 양수나 음수를 표현하고자 할때 위와 같은 코드를 작성하면 아래와 같이 출력된다. (주석에도 써져있지만 숫자를 표현하는 0과 # 중간에 이외의 문자가 들어갈 경우 해당 포맷 맨뒤에 해당 문자가 삽입되게 된다.)