관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch2 - 12 ~ 13 [printf를 이용한 출력] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch2 - 12 ~ 13 [printf를 이용한 출력]

소소한나구리 2023. 11. 2. 16:27

1) println()의 단점 - 출력형식 지정불가

  • 실수의 자리수 조절 불가
  • 정수 / 정수 =  정수로 값이 출력 됨
  • 실수를출력하려면 계산하려는 두개의 값 중 하나의 값을 실수로 변경해야함.
  • 10진수로만 출력 됨
System.out.println(10.0/3);  -> 3.333333333...
System.out.println(10/3) -> 3
System.out.println(0x1A); -> 26

2) printf()로 출력 형식을 지정 가능

System.out.printf("%.2f",10.0/3);   // 3.33
// %.2f = 소수점 둘째자리까지 출력

System.out.printf("%d",0x1A);   // 26
// %d = 10진수

System.out.printf("%X",0x1A);   // 1A
// %X = 16진수
  • 값을 어떻게 출력할지 지시한다는 뜻에서 지시자라고 불림
타입 지시자 설명
정수 %b 불리언 형식으로 출력(boolean)
%d 10진 정수의 형식으로 출력(decimal)
%o 8진 정수의 형식으로 출력(octal)
%x, %X 16진 정수의 형식으로 출력 (hexa-decimal)
실수 %f 부동 소수점의 형식으로 출력(floating-point)
%e, %E 자수 표현식의 형식으로 출력(exponent)
문자 %c 문자로 출력(character)
%s 문자열로 출력(string)

(1) System.out.printf("age:%d year:%d\n, 14, 2017);

 

  • 여러개의 지시자를 한번에 사용할 수 있으며, 값의 개수도 지시자의 개수만큼 작성해야함.
    • 1번째 값은 1번째 지시자에 들어가고 2번째 값은 2번째 지시자에 들어감
  • "age: 14 year:2017\n"이 화면에 출력
  • \n , %n =개행문자(줄바꿈)
    • println()은 자동으로 줄바꿈을 하여 출력을 하지만 printf()는 자동으로 줄바꿈을 하지 않으므로 줄바꿈 필요시 입력
    • %n 은 OS에 상관없이 모두 개행문자가 출력되므로 가급적이면 %n을 사용 권장

(2) 정수를 10,8,16진수로 출력

System.out.printf("%d", 15);   // 15 -> 10진수
System.out.printf("%o", 15);   // 17 -> 8진수 (일,칠로 읽음 : 8진수에서는 1이 8이기 때문)
System.out.printf("%x", 15);   // f -> 16진수
System.out.printf("%s", Integer.toBinaryString(15));   // 1111 -> 2진수
  • 2진수로 출력하는 지시자가 없어서 필요시 위처럼 입력 (자주 사용하지 않음)
  • 메소드 괄호안의 숫자 안에 변하고자 하는 숫자를 입력하면 2진수로 출력 됨

(3) 8진수와 16진수에 접두사 붙혀서 출력하기

System.out.printf("%#o", 15);   // 017
System.out.printf("%#x", 15);   // 0xf
System.out.printf("%#X", 15);   // 0XF

 

(4) %f, %e, %g

  • 실수 출력을 위한 지시자 (%f),
  • 지수형식(%e)
  • 간략한 형식(%g = %f와 %e 중 더 간략하게 표현할 수 있는 것으로 출력)
// 소수점의 자리수가 float이 표현하는 자리수보다 길기 때문에 원래라면 double로 저장하는 것이 맞음
float f = 123.4567890f

// float 타입으로 변수를 저장하여 앞에서부터 7자리까지만(정수자리포함) 정확하게 출력됨, 뒤 숫자는 의미 없음
System.out.printf("%f", f);   // 123.4567(정확)87(랜덤)

// 맨 끝자리 = 반올림 적용하여 출력 (실제 저장 된 값은 원래의 값으로 저장되고 출력만 반올림)
// 1.234568e+02, 지수형식, e+02는 10의 2제곱을 뜻하므로 123.4568을 뜻함
System.out.printf("%e", f);   

// 실수를 소수점 포함하여 7자리까지 출력
System.out.printf("%g", 123.456789);   // 123.457 표현하기 좋은 %f로 출력 됨

// 실수를 출력할 때는 기본적으로 %f로, 숫자에 0이 많이 들어갈 경우 %e로 출력
// 1.00000e-8, e-8은 10의 -8제곱
System.out.printf("%g", 0.00000001);

 

(5) 출력되는 자리수 조절(정수)

  • ex) 5자리 출력지시, 2자리 출력
// 기본 오른쪽 정렬하여 앞쪽에 공백 표시
System.out.printf("[%5d]%n", 10);    // [   10]

// 왼쪽 정렬로 할경우 지시자 앞에 - 표시
System.out.printf("[%-5d]%n", 10);    // [10   ]

// 공백 대신 0을 출력할 경우 지시자 앞에 0 표시
System.out.printf("[%05d]%n", 10);    // [00010]

 

(6) 출력되는 자리수 조절(실수)

  • %전체자리.소수점아래자리f
  • 정수 앞쪽의 빈자리는 공백으로, 소수점 아래의 빈자리는 0으로 채움
  • 전체 자리수에는 소수점까지 포함
double d = 1.23456789;

// 전체 14자리 중 소수점 아래 10자리까지 출력 [  1.2345678900]
System.out.printf("d=%14.10f%n", d);

 

(7) 출력되는 자리수 조절(문자열) - %d와 거의 동일//

  • 지시자 앞에 '.(dot)' 을 찍어서 부분 출력 가능
String url = "www.codechobo.com";

System.out.printf("[%s]%n", url);   // [www.codechobo.com]
System.out.printf("[%20s]%n", url); // [   www.codechobo.com]
System.out.printf("[%-s]%n", url);  // [www.codechobo.com   ]
System.out.printf("[%.8s]%n", url); // [www.code]

3)실습

System.out.println(10.0/3);
System.out.printf("%d%n", 15);
System.out.printf("%#o%n", 15);
System.out.printf("%#x%n", 15);
System.out.printf("%#X%n", 15);
System.out.printf("%s", Integer.toBinaryString(15));

double f = 123.456789;
System.out.printf("%f%n", f);
System.out.printf("%e%n", f);
System.out.printf("%g%n", f);

System.out.printf("[%5d]%n", 1234567); // 지정된 자리수보다 초과되어 출력할 경우 모두 출력
System.out.printf("[%-5d]%n", 10);
System.out.printf("[%05d]%n", 10);
double d = 1.23456789;
System.out.printf("%.6f%n", d);

System.out.printf("[%s]%n", "www.codechobo.com");
System.out.printf("[%20s]%n", "www.codechobo.com");
System.out.printf("[%-20s]%n", "www.codechobo.com");
System.out.printf("[%.8s]%n", "www.codechobo.com");

출력값

3.3333333333333335
15
017
0xf
0XF
1111123.456789
1.234568e+02
123.457
[1234567]
[10 ]
[00010]
1.234568
[www.codechobo.com]
[ www.codechobo.com]
[www.codechobo.com ]
[www.code]

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의