HOWTO · C++
C++에서 float를 int로 변환하는 방법
이 기사에서는 C++에서 float를 int로 변환하는 방법을 소개합니다.
이 페이지의 내용
C++ float를 int로 변환하고 소수 부분을 버리려면 static_cast<int>(value)를 사용하세요. 부동소수점에서 정수로의 변환은 0 방향으로 절단합니다. 4.8f는 4가 되고, -4.8f는 -4가 됩니다. 다른 반올림 규칙이 필요하면 변환하기 전에 <cmath>에서 함수를 선택하세요.
직접 할당을 사용하여 float를 int로 변환하기
직접 할당은 float를 암시적으로 int로 변환합니다. 소수 부분은 버려집니다. 익숙한 값을 할당하고 변환된 정수를 표시하는 간결한 프로그램은 다음과 같습니다.
#include <iostream>
int main() {
float value = 4.8f;
int result = value;
std::cout << result << '\n';
}
C++ 변환 의미론은 4.8f에 대해 정수 값 4를 제공합니다. 이 예제는 다음을 출력합니다.
4
음수 입력의 경우에도 절단은 여전히 0 방향으로 이동하므로, -4.8f는 내림 값 -5가 아니라 -4로 변환됩니다.
C 스타일 캐스트를 사용하여 float를 int로 변환하기
C 스타일 캐스트는 int result = (int)value;와 같이 대상 타입을 괄호 안에 씁니다. 스칼라 부동소수점 값의 경우, 변환된 값을 int로 표현할 수 있다면 직접 할당 및 static_cast<int>(value)와 동일한 0 방향 절단 결과를 생성합니다.
C 스타일 캐스트는 여러 종류의 변환을 표현할 수 있으므로 그 효과가 한눈에 덜 명시적입니다. 현대 C++에서는 이것이 의도한 변환일 때 static_cast<int>(value)를 선호하세요. C 스타일 표기법은 기존 코드에서 인식하는 데 여전히 유용하지만, 부동소수점 값이 절단되는 방식을 바꾸지는 않습니다.
static_cast를 사용하여 float를 int로 변환하기
static_cast<int>(value)를 사용하여 변환을 명시적으로 만들고 대상 타입을 식별하세요. 부동소수점 값의 경우 static_cast는 0 방향으로 절단합니다. 가장 가까운 정수로 반올림하지도 않고 결과가 int에 들어가는지 확인하지도 않습니다.
절단된 값을 int로 표현할 수 없으면 이 변환은 정의되지 않은 동작을 합니다. 변환하기 전에 원래 값이 int의 한계 내에 있는지 확인하는 것은 보수적인 보호 장치입니다. 절단된 결과가 여전히 들어갈 수 있는 일부 소수 값을 거부할 수 있습니다. static_cast는 값을 제한하거나 검증하지 않습니다. 언어 규칙과 이 연산자가 지원하는 다른 변환에 대해서는 static_cast 참조를 참조하세요.
반올림 전략을 사용하여 float를 int로 변환하기
0 방향으로의 절단이 원하는 결과가 아닐 때는 반올림 함수를 선택하세요. <cmath>를 포함하고 그 결과를 int로 변환하기 전에 함수를 적용하세요. 반올림된 값 역시 int로 표현할 수 있어야 합니다.
내림(Floor)
std::floor(value)는 입력보다 크지 않은 가장 큰 정수 값을 반환합니다. 예를 들어, floor는 4.8f에 대해 4를, -4.8f에 대해 -5를 제공합니다. 이는 int로 직접 변환하면 각각 4와 -4를 제공하는 것과 다릅니다. floor 결과를 정수로 저장하려면, 범위 내에 있는지 확인한 후 static_cast<int>(std::floor(value))를 사용하세요.
올림(Ceil)
std::ceil(value)는 입력보다 작지 않은 가장 작은 정수 값을 반환합니다. 4.8f에 대해 5를, -4.8f에 대해 -4를 제공합니다. 정수가 필요하고 결과가 int에 들어갈 때는 그 결과를 static_cast<int>(std::ceil(value))로 변환하세요.
가장 가까운 정수로 반올림
std::round(value)는 가장 가까운 정수 값을 선택하며, 중간인 경우는 0에서 멀어지는 방향으로 반올림합니다. 따라서 std::round(4.5f)는 5이고, std::round(-4.5f)는 -5입니다. 정수를 얻으려면 static_cast<int>(std::round(value))를 사용하고, 반올림된 결과를 표현할 수 있는지 다시 확인하세요. 이 규칙은 특히 음수 입력에서 절단, floor, ceil과 다릅니다.
결론
일반적인 float에서 int로의 변환에서는 static_cast<int>(value)가 의도를 명확히 하고 0 방향으로 절단합니다. 직접 할당과 C 스타일 캐스트는 적합한 값에 대해 동일한 절단 동작을 하지만, 이름이 있는 캐스트가 의도적인 C++ 변환으로 인식하기 더 쉽습니다. 각 반올림 규칙이 작업에 맞을 때는 <cmath>의 std::floor, std::ceil 또는 std::round를 사용하세요. 어떤 변환을 하기 전에도 절단이나 반올림으로 생성된 값이 int의 범위 안에 들어가는지 확인하세요. 이러한 캐스트 중 어느 것도 대신 확인하거나 조정해 주지 않습니다.