printf()

soomin·2021년 8월 13일
0

Java-Basic

목록 보기
7/13

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]
		 */
}
profile
블로그 유목민

0개의 댓글