반응형

 

📌 형식화된 출력 - printf()

 보통 화면에 값을 출력할 때는 System.out.println()을 쓰는데 println은 값을 그대로 출력하기 때문에 다른 형식으로 출력을 할 수가 없습니다. 그렇기 때문에 소수점 둘째 자리까지만 출력한다던가, 정수를 16진수 혹은 8진수로 출력한다던가 할 때 사용하는 것이 printf입니다.

System.out.printf("age:%d",age);

 

✏️ printf()의 지시자

지시자 설명
%b 불리언(boolean) 형식으로 출력
%d 10진(deciaml) 정수의 형식으로 출력
%o 8진(octal) 정수의 형식으로 출력
%x, %X 16진(hexa-decimal) 정수의 형식으로 출력
%f 부동 소수점(floating-point)의 형식으로 출력
%e, %E 지수(exponent) 표현식의 형식으로 출력
%c 문자(character)로 출력
%s 문자열(string)로 출력

 

📋 예제 코드 1

import java.util.*;
public class Main {
	
	public static void main(String[] args){
		
		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; // 8진수 10, 10진수로는 8
		int hexNum = 0x10; // 16진수 10, 10진수로는 16
		int binNum = 0b10; // 2진수 10, 10진수로는 2
		
		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);
		System.out.printf("big=%d%n", big);
		System.out.printf("hex=%x%n", hex);
		System.out.printf("hex=%#x%n", hex);
		System.out.printf("hex=%#X%n", hex);
		System.out.printf("octNum=%o, %d%n", octNum, octNum);
		System.out.printf("hexNum=%x, %d%n", hexNum, hexNum);
		System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);		
		
	}
}

👨🏻‍💻 결과

💭 설명

System.out.printf("finger=[%5d]%n", finger);
System.out.printf("finger=[%-5d]%n", finger);
System.out.printf("finger=[%05d]%n", finger);

위 결과를 보면 '0'과 '-'가 어떠한 역할을 하는지 알 수 있습니다.

 

System.out.printf("hex=%x%n", hex);
System.out.printf("hex=%#x%n", hex);
System.out.printf("hex=%#X%n", hex);

지시자 '%x'와 '%o' 에 '#'을 사용하면 접두사 '0x'와 '0'이 각각 붙습니다.
그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력합니다.

 

System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);

10진수를 2진수로 출력해주는 지시자는 없기 때문에 정수를 2진 문자열로 변환해주는 Integer.toBinaryString(int i)를 사용해야 합니다.

 

System.out.printf("c=%c, %d %n",c, (int)c);

C언어에서는 char타입의 값을 지시자 '%d'로 출력이 가능하지만 자바에서는 불가능합니다.
위와 같이 int형으로 캐스팅해야 '%d'로 출력이 가능합니다.

 

📋예제 코드 2

import java.util.*;
public class Main {
	
	public static void main(String[] args){
		
		String url = "https://cocoon1787.tistory.com/";
		
		float f1 = .10f; // 0.10
		float f2 = 1e1f; // 10.0
		float f3 = 3.14e3f;
		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("[%40s]%n", url);
		System.out.printf("[%-40s]%n", url);
		System.out.printf("[%.18s]%n", url);
		
	}
}

👨🏻‍💻 결과

💭 설명

실수형 값의 출력에 사용되는 지시자는 '%f', '%e', '%g'가 있는데, 주로 '%f'가 쓰이고, '%e'는 지수 형태로 출력할 때, 그리고 '%g'는 간략하게 표현할 때 사용된다.

'%f'는 기본적으로 소수점 아래 6자리까지만 출력하기 때문에 소수점 7자리에서 반올림되었다.

System.out.printf("d=%14.10f%n", d);

%전체자리수.소수점아래자리f

그리고 다음과 같이 전체 자릿수와 소수점 아래의 자릿수를 지정할 수 도 있다.

 

 

📚 참고

자바의 정석 3판(저자 남궁성)

반응형

+ Recent posts