C 에서는 printf("%#x", 10); 이렇게 사용한다 읽기가 어렵다 그래서 '조정자' 라는 것이 생겨 났다.
cout << showpos << number; //+123
cout << noshowpos << number; //123
cout << dec << number; //123
cout << hex << number; //7b
cout << oct << number; //173
cout << uppercase << hex << number << endl; //7B
cout << nouppercase << hex << number << endl; //7b
cout << showbase << hex << number << endl; //0x7b
cout << noshowbase << hex << number << endl; //7b
cout << setw(6) << left << number; //|-123 |
cout << setw(6) << internal << number; //|- 123|
cout << setw(6) << right << number; //| -123|
cout << noshowpoint << decimal1 << " " << decimal2; //100 100.12
cout << showpoint << decimal1 << " " << decimal2; //100.000 100.120
float pi = 3.14;
cout << pi << endl;// 3.14
cout << noshowpoint << pi << endl;// 3.14
cout << showpoint << pi << endl;// 3.14000
float pi = 3.141519;
cout << pi << endl;// 3.14152
cout << noshowpoint << pi << endl;// 3.14152
cout << showpoint << pi << endl;// 3.14152
cout << fixed << number; //123.456789
cout << scientific << number; //1.2345678+02
cout << boolalpha << bReady; //true
cout << noboolalpha << bReady; //1
함수 형식이다.
#include <iomanip>
cout << setw(5) << number; //| 123|
setw로 뭔가 채우기 위해서는 적어도 빈문자열이라도 출력 해야 한다.
cout << setfill('*') << setw(5) << ""; //*****
cout << setfill('*') << setw(5) // 이렇게 하면 아무것도 출력 안함.
대부분의 Manipulator는 한번 지정하고 나면 그 다음 stream을 사용할 때도 영향을 받게 된다. 그러나 setw는 한번만 적용 된다.
char buf[4] = "ABC";
std::cout << setw(5) << buf << endl;
std::cout << buf << endl;
/*
[Output]
ABC
ABC
*/
Ex
cout << left << setw(6) << -10 << '@' << '$' << endl;
cout << right << setw(6) << -10 << '@' << '$' << endl;
cout << internal << setw(6) << -10 << '@' << '$' << endl;
/*
-10 @$
-10@$
- 10@$
setw는 한번만 적용 된다.
*/
#include <iomanip>
cout << setfill('*') << setw(5) << number; //**123
//소수점 이하 7자리까지
cout << setprecision(7) << number //123.4567
double f = 3.1415926535879;
//fixed가 '없는' 경우엔 정수부+소수부 기준으로 다섯자리를 반올림하여 출력
//3.1416, 정수부+소수부 바로 뒷자리에 있는 9를 반올림 함.
cout << setprecision(5) << f << '\n';
//fixed가 '있는' 경우엔 소수분만을 기준으로 다섯자리를 반올림하여 출력
//3.14159, 소수부 바로 뒷자리에 있는 2를 반올림 함.
cout << fixed << setprecision(5) << f << '\n';
조정자는 함수로도 호출 할 수 있다
cout << showpose;
cout.setf(ios_base::showpos);
cout << setw(5);
cout.width(5);
//멤버 메서드들은 ios_base 네임스페이스에 존재
float 의 출력시 반올림이 이루어 진다는 것을 염두해 두자
cout << 3.123415 << endl;//3.12342
cout << 3.123414 << endl;//3.12341
//6자리에서 반올림 이루어짐.