HOWTO · C++
C++에서 지정된 소수점으로 숫자를 인쇄하는 방법
이 기사에서는 C++에서 지정된 소수점으로 숫자를 인쇄하는 방법을 소개합니다.
이 페이지의 내용
부동소수점 값을 소수점 아래 원하는 자릿수로 출력하려면 std::cout에 std::fixed와 std::setprecision(n)을 차례로 지정합니다. 예를 들어 std::fixed << std::setprecision(2)는 소수점 아래 두 자리로 값을 표시합니다. 출력에는 <iostream>, 조작자에는 <iomanip>을 포함하세요.
std::fixed와 std::setprecision 사용하기
std::fixed는 고정 소수점 표기를 선택합니다. 이 형식에서는 std::setprecision(n)이 소수점 아래 자릿수를 지정하므로, 값은 화면에 표시될 때 반올림되고 필요한 경우 뒤에 0이 채워집니다. std::fixed를 지정하지 않으면 std::setprecision(n)은 유효 숫자의 개수를 제어합니다. 자세한 내용은 setprecision 가이드를 참고하세요.
다음은 컴파일하고 실행할 수 있는 완전한 프로그램입니다. 코드와 예제 출력은 변경할 수 없어 영어로 표시됩니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
#include <iomanip>
#include <iostream>
int main() {
const double values[] = {3.14159, 2.5, 0.004};
std::cout << std::fixed << std::setprecision(2);
for (double value : values) {
std::cout << value << '\n';
}
}
3.14
2.50
0.00
첫 번째 값은 표시할 때 반올림되고, 두 번째 값에는 소수부 자릿수가 하나 표시되며, 세 번째 값은 같은 소수점 아래 두 자리로 출력됩니다. 서식 지정은 화면에 보이는 표현만 바꾸며, 저장된 값이나 부동소수점 연산의 정확성을 바꾸지는 않습니다. 소수점 아래 세 자리를 표시하려면 std::setprecision(3)을 사용하세요.
스트림은 이후의 부동소수점 값 출력에도 std::fixed와 선택한 정밀도를 유지합니다. 다음 값에 다른 표시 형식이 필요하다면 정밀도를 다시 지정하세요. 조작자는 <iomanip>에 선언되어 있습니다.
std::setw와 std::setfill로 값 정렬하기
열을 맞출 때 std::setw(width)는 다음에 삽입되는 값의 최소 필드 너비를 지정합니다. 필요한 공간보다 값이 길어도 잘라내지 않으며, 너비 설정은 그 값이 삽입된 뒤 초기화됩니다. std::setfill(ch)은 채움 문자를 선택하고 변경할 때까지 계속 적용됩니다. 숫자는 기본적으로 오른쪽 정렬됩니다.
다음은 점을 채움 문자로 사용하고 각 숫자를 너비 8칸의 필드에 표시하는 완전한 예제입니다. 코드와 예제 출력은 변경할 수 없어 영어로 표시됩니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
#include <iomanip>
#include <iostream>
int main() {
std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
<< std::setw(8) << 12.5 << '\n'
<< std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75
필드 너비가 필요한 값마다 std::setw를 다시 적용하세요. 채움 문자를 바꿔도 너비가 설정되는 것은 아닙니다. 부호, 숫자, 소수점, 예상되는 소수부 자릿수를 모두 담을 수 있도록 너비를 정하세요.
printf로 서식 지정하기
C++ 프로그램에서는 <cstdio>에 있는 printf도 사용할 수 있습니다. 형식 문자열의 %.2f는 부동소수점 값을 소수점 아래 두 자리로 출력합니다. 다른 자릿수를 원하면 2를 바꾸세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
#include <cstdio>
int main() {
const double value = 1.41421;
std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41
printf에서 %f는 double 인수를 위한 부동소수점 변환 지정자입니다. 형식 지정자와 인수의 자료형이 일치해야 하며, 잘못 짝지으면 정의되지 않은 동작이 발생할 수 있습니다. 이 예제는 완전한 C++ 프로그램이며 스트림용 헤더는 필요하지 않습니다. 코드와 예제 출력은 변경할 수 없어 영어로 표시됩니다.
C++ 스트림과 printf 중 선택하기
다른 스트림 삽입 연산과 함께 조합해 서식을 지정하고 각 값의 자료형을 유지하려면 std::fixed와 std::setprecision을 사용하는 std::cout을 선택하세요. 기존 printf 형식 문자열을 다루거나 해당 문법이 더 편리하다면 printf를 사용할 수 있습니다. 두 방식 모두 C++에서 유효합니다.
고정된 소수점 자릿수가 필요하면 std::fixed와 std::setprecision을 함께 사용하세요. 기본 스트림 형식에서는 정밀도 조작자만 사용했을 때 의미가 달라집니다. 열에 여백을 채워 맞추려면 std::setw와 std::setfill을 사용하세요. std::setw의 너비는 한 번만 적용되므로 각 값 앞에서 다시 지정해야 합니다.