Java DecimalFormat으로 숫자 출력 서식 정하기

DevSeoRex·2022년 5월 29일
0

Java

목록 보기
1/15

소수 자리 몇번째자리까지 출력하라고 할때 10의 배수로 곱했다가 또 나누고 그런 반복 작업을 해서 결국 값을 얻어 내고는 했었다.

너무 효율이 떨어지기에 어떻게하면 좀더 편리하게 출력할 수 있을지 찾아 보다가 두가지 방법을 발견했다.

println()의 단점

Ctrl + Space로 자동완성 시키면 바로 나오는 println()은 있는 그대로 출력해주기 때문에,
서식을 지정해서 출력할 수 없다는 단점이 있다.

방법 1. DecimalFormat

java.text.DeicmalFormat 클래스를 import해서
DecimalForamt 클래스에서 제공하는 format() 메소드를 통해서 서식을 지정할 수 있다.

보통 객체를 생성하면서 패턴을 지정하는데,
DecicalFormat dc = new DecimalFormat("패턴");
이렇게 해주면 된다 패턴은 #,0으로 지정하거나 혼합이 가능한데 테스트 해보니
#을 계속 쓰다가 0을 한번 써주는 것은 에러가 나온다 그래서 하나로 맞춰보았다.

예를 들어 "#.####"을 서식으로 지정하였는데 맨 끝자리가 0일경우 해당 0은 생략된다.
반대로 "0.0000"을 서식으로 지정하면 맨 끝자리가 0이여도 해당 0은 출력된다.

방법 2. printf()

printf() 메소드는 배운것을 잊어버릴만큼 거의 안쓰다시피 했다.
하지만 printf() 메소드로 서식을 지정하면 DecimalFormat 없이도 출력이 가능하다.
System.out.printf("%.4f\n",a/b); 이렇게 출력을 하면 앞에 큰 따옴표로 묶인 것들이 서식이다.
%.4는 소수점 4째 자리까지 출력하라는 뜻이고, f는 소수다(float) \n은 개행문자로서, 줄바꿈을
해주는 역할이다.
두번째 오는 a/b는 double 타입으로 선언한 a와b를 나눈 값이다.
즉 a/b를 지정한 "%.4f\n" 서식으로 출력하라는 의미다.

DecimalFormat과 printf()를 이용한 코드

import java.text.DecimalFormat;
public class DecimalFormat1 {
	public static void main(String[] args) {
		double a = 3.232;
		double b = 2.232;
		DecimalFormat dc = new DecimalFormat("0.0000"); //소수 자리수 네자리 까지 출력, 의미 없는 0도 출력
		DecimalFormat dc2 = new DecimalFormat("#.####"); //소수 자리수 네자리 까지 출력, 의미 없는 0은 제거
		System.out.println(a/b);
		System.out.println(dc.format(a/b));
		System.out.println(dc2.format(a/b));
		System.out.printf("%.4f\n",a/b); //소수 자리수 네자리 까지 출력, %.4f => 소수 네자리까지 출력, \n => 개행문자(줄바꿈)
	}
}

앞에서 작성한 바와 같이 이렇게 코드를 작성하면,

  1. 아무런 서식을 적용하지 않은 첫번째 출력문은 소수 자리가 전부 출력되었다.
  2. DecimalFormat을 이용한 두번째 출력문은 "0.0000" 이 Format이므로 끝자리 0까지 출력되었다.
  3. DecimalFormat을 이용한 세번째 출력문은 "#.####"이 Format이므로 끝자리 0이 생략되어 출력되었다.
  4. printf()를 이용한 네번째 출력문은 2번과 동일한 결과로 0을 포함한 4번째 자리까지 출력되었다.

아까 사소한 오류를 겪었는데, DecimalFormat이 import가 되지 않는 현상을 겪었다.

그 이유는 클래스를 생성할때 import할 패키지와 이름이 같은 DecimalFormat으로 생성했기 때문이였다. 다시금 클래스를 생성할때 이름을 어떻게 명명해야 될지 생각하게 된 계기가 되었다.

0개의 댓글