Java

5. printf()

Jungsoomin :) 2021. 8. 13. 00:49

1. printf() 함수가 필요한 이유


println() 함수는 변수의 값을 "있는그대로" 출력한다.

원하는 상황에 따라서, 변수의 값의 "형식"을 다르게 출력하고 싶을 때가 있을 수 있는데, 이 때 printf() 함수를 사용한다.

 

printf() 함수는 "지시자"를 통해 값을 출력하는 형식을 지정할 수 있으며, 함수가 호출될 때 값을 지시자에 맞게 변환하고 출력하는 기능을 가지고 있다.

public class Printf {
    public static void main(String[] args) {
        System.out.printf("age: %d",29); //age: 29
    }
}

 

 

2. printf() 함수의 구조


public PrintStream printf(String format, Object ... args) {
        return format(format, args);
    }
  1. 인자는 지시자를 포함한 출력 문자열과 변환시킬 값의 가변인자로 구성
  2. 지시자를 포함한 출력형식을 주고, 변환할 값을 주면된다.
  3. 지시자와 변환할 값의 순서는 반드시 일치해야한다.

 

3. 지시자


 

지시자 규칙은 동일하므로, log-back.xml 등의 설정에서 %-5p 같은 지시자는 지시자 사이에 음수가 있으므로 로그 레벨을 포함한 우항 공백 5칸을 의미한다.

public static void main(String[] args) {
	System.out.printf("age: %d",29);//age: 29
	
	// 지시자의 순서대로 값이 변환 된다.
	System.out.printf("age: %d, year: %d",29,2021);//age: 29age: 29, year: 2021
	
	byte b = 1;
	short s = 2;
	char c = 'A';
	
	int finger = 10;
	long big = 100_000_000_000L;
	long hex = 0xFFFF_FFFF_FFFF_FFFFL;
	
	int octNum = 010;
	int hexNum = 0x10;
	int binNum = 0b10;
	
	System.out.printf("b=%d%n",b);
	System.out.printf("s=%d%n",s);
	System.out.printf("c=%c,  %d  %n",c,(int)c);
	System.out.printf("finger=[%5d]%n",finger);// 지시자 사이의 양수는 값을 포함한 좌항 공백
	System.out.printf("finger=[%-5d]%n", finger);// 지시자 사이의 음수는 값을 포함한 우항 공백
	System.out.printf("finger=[%05d]%n",finger);// 지시자 사이의 0으로 시작하는 숫자는 값을 포함한 0추가
	System.out.printf("big=%d%n",big);
	System.out.printf("hex=%x%n",hex);// long 값이 16진수로 출력
	System.out.printf("octNum=%o,  %d%n",octNum,octNum);// int 값이 8진수 , 10진수로 출력
	System.out.printf("hexNum=%x,  %d%n",hexNum,hexNum);// int 값이 16진수 , 10진수로 출력
	System.out.printf("binNum=%s,  %d%n",Integer.toBinaryString(binNum),binNum);// int 값이 문자열, 10진수로 출력
	
	/**
	 * b=1
	 * s=2
	 * c=A,  65
	 * finger=[   10]
	 * finger=[10   ]
	 * finger=[00010]
	 * big=100000000000
	 * hex=ffffffffffffffff
	 * octNum=10,  8
	 * hexNum=10,  16
	 * binNum=10,  2
	 */
}
  • 지시자 사이의 실수전체자리수.소수점 을 의미한다.
    • 정수자리 중 비어 있는 공간은 공백으로 처리되며, 014.10 의 경우 0으로 처리된다.
    • 소수점 자리 중 비어있는 공간은 0으로 처리된다.
public static void main(String[] args) {
		String url = "www.codechobo.com";
		
		float f1 = .10f;//0.10
		float f2 = 1e1f;//1 * 10의 1승 10.0
		float f3 = 3.1434f;
		double d = 1.23456789;
		
		System.out.printf("f1=%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);// 지시자 사이에 있는 소수점은 전체자리.소수점을 의미한다.
		
		System.out.printf("[12345678901234567890]%n");
		System.out.printf("[%s]%n",url);
		System.out.printf("[%20s]%n",url);// 지시자 사이에 있는 양수는 값을 포함한 좌항공백을 의미한다.
		System.out.printf("[%-20s]%n",url);// 지시자 사이에 있는 음수는 값을 포함한 우항공백을 의미한다.
		System.out.printf("[%.8s]%n",url);// 지시자 사이에있는 .숫자는 좌항으로부터 8자리를 의미한다.
		/*
		f1=0.100000,  1.000000e-01,  0.100000
		f2=10.000000,  1.000000e+01,  10.0000
		f3=3.143400,  3.143400e+00,  3.14340
		d=1.234568
		d=  1.2345678900
		[12345678901234567890]
		[www.codechobo.com]
		[   www.codechobo.com]
		[www.codechobo.com   ]
		[www.code]
		 */
}

'Java' 카테고리의 다른 글

5. 진수  (0) 2021.08.13
4. 상수와 리터럴  (0) 2021.08.13
3. 변수의 타입  (0) 2021.08.12
2. 변수  (0) 2021.08.12
1. 주석  (0) 2021.08.10