Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 정석 기초편 ch12
- 타임리프 - 기본기능
- 스프링 mvc2 - 타임리프
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch1
- 게시글 목록 api
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch9
- 스프링 mvc2 - 로그인 처리
- jpa 활용2 - api 개발 고급
- 스프링 mvc2 - 검증
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch4
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch13
- 자바의 정석 기초편 ch8
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch5
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch3
- jpa - 객체지향 쿼리 언어
- 스프링 입문(무료)
- @Aspect
- 스프링 db2 - 데이터 접근 기술
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch14
- 스프링 db1 - 스프링과 문제 해결
Archives
- Today
- Total
나구리의 개발공부기록
자바의 정석 기초편 ch2 - 12 ~ 13 [printf를 이용한 출력] 본문
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]
** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의
'유튜브 공부 > JAVA의 정석 기초편(유튜브)' 카테고리의 다른 글
자바의 정석 기초편 ch2 - 17, ch3 - 1 ~ 4[타입간의 변환방법, 연산자와 피연산자, 연산자의 우선순위와 결합수칙] (0) | 2023.11.05 |
---|---|
자바의 정석 기초편 ch2 - 14 ~ 16 [scanner(화면에서입력받기),정수형의오버플로우] (0) | 2023.11.02 |
자바의 정석 기초편 ch2 - 10 ~11 [기본형과 참조형, 기본형의 종류와 범위] (1) | 2023.11.02 |
자바의 정석 기초편 ch2 - 7 ~ 9 [문자,문자열 리터럴, 문자열 결합,두 변수의 값 교환] (0) | 2023.11.01 |
자바의 정석 기초편 ch2 - 6 [리터럴의 접두사와 접미사] (1) | 2023.11.01 |