반응형
📌 형식화된 출력 - 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판(저자 남궁성)
반응형
'☕️JAVA' 카테고리의 다른 글
[JAVA] Deque(덱) 사용법 (0) | 2022.01.04 |
---|---|
[JAVA] Queue(큐) 사용법 (add vs offer / remove vs poll / element vs peek) (0) | 2021.12.07 |
[JAVA] 자바 String to Int, Int to String 형변환 (0) | 2021.10.07 |
[JAVA] 명품 자바 에센셜 연습문제 3장 이론&실전 문제 풀이 (2) | 2021.01.11 |
[JAVA] 자바 0~99사이 랜덤 숫자 맞히기 게임 (0) | 2021.01.10 |