Ctrl + Space로 자동완성 시키면 바로 나오는 println()은 있는 그대로 출력해주기 때문에,
서식을 지정해서 출력할 수 없다는 단점이 있다.
java.text.DeicmalFormat 클래스를 import해서
DecimalForamt 클래스에서 제공하는 format() 메소드를 통해서 서식을 지정할 수 있다.
보통 객체를 생성하면서 패턴을 지정하는데,
DecicalFormat dc = new DecimalFormat("패턴");
이렇게 해주면 된다 패턴은 #,0으로 지정하거나 혼합이 가능한데 테스트 해보니
#을 계속 쓰다가 0을 한번 써주는 것은 에러가 나온다 그래서 하나로 맞춰보았다.
예를 들어 "#.####"을 서식으로 지정하였는데 맨 끝자리가 0일경우 해당 0은 생략된다.
반대로 "0.0000"을 서식으로 지정하면 맨 끝자리가 0이여도 해당 0은 출력된다.
printf() 메소드는 배운것을 잊어버릴만큼 거의 안쓰다시피 했다.
하지만 printf() 메소드로 서식을 지정하면 DecimalFormat 없이도 출력이 가능하다.
System.out.printf("%.4f\n",a/b); 이렇게 출력을 하면 앞에 큰 따옴표로 묶인 것들이 서식이다.
%.4는 소수점 4째 자리까지 출력하라는 뜻이고, f는 소수다(float) \n은 개행문자로서, 줄바꿈을
해주는 역할이다.
두번째 오는 a/b는 double 타입으로 선언한 a와b를 나눈 값이다.
즉 a/b를 지정한 "%.4f\n" 서식으로 출력하라는 의미다.
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 => 개행문자(줄바꿈) } }
앞에서 작성한 바와 같이 이렇게 코드를 작성하면,
- 아무런 서식을 적용하지 않은 첫번째 출력문은 소수 자리가 전부 출력되었다.
- DecimalFormat을 이용한 두번째 출력문은 "0.0000" 이 Format이므로 끝자리 0까지 출력되었다.
- DecimalFormat을 이용한 세번째 출력문은 "#.####"이 Format이므로 끝자리 0이 생략되어 출력되었다.
- printf()를 이용한 네번째 출력문은 2번과 동일한 결과로 0을 포함한 4번째 자리까지 출력되었다.
그 이유는 클래스를 생성할때 import할 패키지와 이름이 같은 DecimalFormat으로 생성했기 때문이였다. 다시금 클래스를 생성할때 이름을 어떻게 명명해야 될지 생각하게 된 계기가 되었다.