문제
안녕하세요 저는 C ++에서 이와 같은 이중 숫자 (제로에서 멀리 떨어져)를 원합니다.
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
이 작업을 수행하는 효율적인 방법은 무엇입니까?
해결책
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
언급했듯이 Huppie 기사는 인용합니다, 이것은 모든 플로트 유형에서 작동하는 템플릿으로 가장 잘 표현됩니다.
보다 http://en.cppreference.com/w/cpp/numeric/math/floor 그리고 http://en.cppreference.com/w/cpp/numeric/math/floor
또는 비 기능 버전 인 PAX 덕분에 다음과 같습니다.
x = (x < 0) ? floor(x) : ceil(x);
다른 팁
비슷한 문제에 대한 좋은 기사가 있습니다. cplusplus.com. 문제에 대한 쉬운 해결책은 다음과 같습니다.
double customRound( double value ) const {
return value < 0 ? floor( value ) : ceil( value );
}
더 나은 솔루션은 기사에 언급 된 솔루션으로 템플릿을 사용합니다.
//--------------------------------------------------------------------------
// symmetric round up
// Bias: away from zero
template <typename FloatType>
FloatType ceil0( const FloatType& value )
{
FloatType result = std::ceil( std::fabs( value ) );
return (value < 0.0) ? -result : result;
}
노력하다
double rounded = _copysign(ceil(abs(x)), x);
제휴하지 않습니다 StackOverflow