문제

안녕하세요 저는 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top