Java (2.2) : printf() 이용하기

NtoZ·2023년 2월 19일
0

Java

목록 보기
5/23
post-thumbnail

12. printf를 이용한 출력

12.1 println()메소드와 printf()메소드의 차이

  • println() 메소드는 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.
  • printf() 메소드는 같은 값이라도 다른 형식으로 출력할 수 있다.
    - e. g. ) 소수점 둘째자리까지만 출력 / 정수를 16진수나 8진수로 출력
   		int A = 100;		// 기본 자료형 변수 A 선언과 동시에 초기화
        System.out.println("A 의 값 : " + A); // 출력 결과 : A의 값 : 100
        		
                ➡️변수 A의 출력형태는 바뀌지 않음. A는 오로지 100으로만 출력됨
                
        ==============================================================
        int B = 100;		// 변수 B 선언과 동시에 초기화. 값 100.
        System.out.printf("B는 %d 이다. %n", B);	// %d(10진수) : B는 100 이다.
        System.out.printf("B는 %x 이다. %n", B);	// %x(16진수) : B는 64 이다.
        System.out.printf("B는 %c 이다. %n", B);	// %c(문자)   : B는 d이다.
        System.out.printf("B는 %s 이다. %n", B);	// %s(문자열) : B는 100이다. 
        System.out.printf("B는 %f 이다. %n", B);	// %f(부동소수점) : B의 리터럴값은 10이므로 에러출력
        
        		➡️변수 B의 출력형태는 바꿀 수 있음.
                ➡️printf()메소드를 이용했기 때문에 다양한 지시자(%d, %x, %c 등)를 사용하여 바꿀 수 있다.
                ➡️※ %n은 개행(줄바꿈)을 위한 도구로, 지시자의 개수에 포함하지 않는다.

12.2 printf()

  • printf()는 같은 값이라도 다른 형식으로 출력할 수 있도록 하는 메소드
  • 일반적 사용례 : System.out.printf("지시자", 변수)
    - 예) B가 int 타입 리터럴 100을 담고 있는 변수 일 때, System.out.printf("B는 %d 이다.", B);
    - %d는 십진수를 출력하도록 하는 지시자
    - B는 출력하고자 하는 변수
    - ""(따옴표) 안에 지시자를 포함하여 입력하고 ,(콤마) 뒤에 지시자의 개수만큼 출력하고자 하는 변수를 입력한다.
  • 만약 출력하려는 값이 2개라면, 지시자도 2개를 사용해야 하며 출력될 값과 지시자의 순서는 일치해야 한다.

12.3 printf() : 지시자(Specifier)

  • 변수의 값을 다른 형식으로 변환할 것을 지시
지시자설명
%b불리언(boolean) 형식으로 출력 (true or false)
%d10진수(decimal) 정수의 형식으로 출력
%o8진수(octal) 형식으로 출력
%x, %X16진수(hexa-decimal) 형식으로 출력 (%x는 소문자, %X는 대문자 출력)
%f부동 소수점(floating point) 형식으로 출력
%e, %E지수(exponent) 형식으로 출력
%c문자(character) 형식으로 출력 (Unicode)
%s문자열(string) 형식으로 출력
  • %n은 지시자의 개수에 포함하지 않으며, 줄바꿈 기능을 제공한다.
  • %f는 소수점 아래 6자리까지만 출력한다. 7자리째에서 반올림한다.

12.4 printf() : 플래그(flag)

  • 지시자와 함께 사용하여 더욱 다양한 형식을 제공하는 것
플래그설명
"-"왼쪽으로 정렬
"+"부호 출력
"0"남는 자리를 0으로 채움
","일정 자리수마다 구분문자 표시
"#"8진수, 16진수 표시시 접두사 포함 등 출력형태 보완

13. printf() 이용한 출력 예제

	<예시>
        int age = 14;
		int year = 2019;
        
        // age:14 출력
		System.out.printf("age:%d", age);
		// age:14 출력 (변수 대신 십진수 리터럴을 직접 넣은 경우)
		System.out.printf("age:%d", 14);
		// age:14 출력 (지시자와 변수 모두 넣지 않은 경우)
		System.out.printf("age:14");
        
		// age: 14 year:2019 (지시자의 개수와 순서가 콤마 뒤의 변수 개수 및 순서와 맞아야함)
		System.out.printf("age:%d year:%d", age, year); 
        
        // printf에서 줄바꿈을 하려면 지시자 ‘%n’을 따로 넣어주어야 한다. (/n 보다 %n이 OS측면에서 안정적)
		System.out.printf("%n"+"age:%d%nyear:%d"+"%n", age, year);
        
	
	<예제>
		String url = "www.codechobo.com";
		float fl = .10f; // 0.10, 1.0e-l
		float f2 = 1e1f; // 10.0, 1.0el, 1.0e+l
		float f3 = 3.14e3f;
		double d = 1.23456789;
        
        //각각의 변수를 각기 다른형태로 출력 %f(부동소수점), %e(10의제곱), $g(간략히)
		System.out.printf("fl=%f, %e, %g%n", f1, f1, f1);
		System.out.printf("f2=%f, %e, %g%n", f2, f2, f2);
		System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);
		System.out.printf("d=%f%n", d);
		System.out.printf("d=%14.10f%n", d); // 전체 14자리 중 소수점 10자리
		System.out.printf("[12345678901234567890]%n");
		System.out.printf("[%s]%n", url); // 문자열 형태로 출력 후 개행
		System.out.printf("[%20s]%n", url);	// 총 20자리 중 문자열 형태로 변수 url 출력
		System.out.printf("[%-20s]%n", url); // 왼쪽 정렬 플래그(%-)
		System.out.printf("[%.8s]%n", url); // 왼쪽에서 8글자만 출력(%.8s)
	<예제 출력결과>
        fl=0.100000, 1.000000e-01, 0.100000
        f2=10.000000, 1.000000e+01, 10.0000
        f3=3140.000000, 3.140000e+03, 3140.00
        d=1.234568		// 마지막 자리가 반올림 되었는데, f는 소수점 아래 6자리까지만 출력됨
        d=  1.2345678900
        [12345678901234567890]
        [www.codechobo.com]
        [   www.codechobo.com]
        [www.codechobo.com   ]
        [www.code]

13.1 printf()로 문자열 자리수 나타내기

<⬇️문자열 중 일부 출력 : %.출력할 글자수s>

  	    String url = "www.codechobo.com";
		
  		//왼쪽에서 8글자만 출력
		System.out.printf("[%.8s]%n", url); // [www.code]
		//왼쪽에서 10글자를 출력
  		System.out.printf("[%.10s]%n", url); // [www.codech]
        
  		System.out.printf("%5d", 1234567) // 1234567 
  		*=> 리터럴이 지정된 자리수보다 더 많을 경우 짤리지 않고 온전히 출력

13.2 printf()로 숫자 자리수 나타내기

<⬇️자리수를 나타내기 : %전체자리.소수점아래자리f>

  	    //소수점 포함한 10자리 실수 리터럴을 담고 있는 변수 d (전체10자리, 그 중 소수점 8자리)  
  		double d = 1.23456789; 	
		
  		// %14.10f => 전체자리수 14자리 중 소수점이 10자리를 차지. 이를 부동소수점(f)형태로 출력 
  		//소수점 두 자리 채우기 위해 우측에 0, 전체자리 두 자리 더 채워야하므로 좌측 공백 
        System.out.printf("%14.10f",d); // __1.2345678900
  
  		// %-14.10f => (-)왼쪽 정렬, (14.10)전체자리수 14 중 소수점10자리, (f)부동소수점 형태로 출력 
  		System.out.printf("%-14.10f",d); // 1.2345678900__
    

🌟 13.3 플래그, 자리수를 포함한 지시자 사용

1. 플래그를 포함하는 지시자 : %(플래그)(지시자)

	<예시>
       System.out.printf("%,d" ,10000000); // 출력 결과: 10,000,000

2. 플래그와 자리수형식을 포함하는 지시자 : %(플래그)(자리수)(지시자)

	<예시>
        //%다음 플래그-전체 자리수-지시자 순으로 작성
        System.out.printf("%,20d" ,10000000);

☑️ 정리: %로 열고, 플래그 넣고, 자리수 넣고, 지시자(d 등)로 닫기

12~ 13) 참고자료:

  1. 블로그 : 자바 printf()출력문 지시자 및 사용예제
  2. 다양한 지시자 및 활용법
profile
9에서 0으로, 백엔드 개발블로그

0개의 댓글