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과 # 중간에 이외의 문자가 들어갈 경우 해당 포맷 맨뒤에 해당 문자가 삽입되게 된다.)