سؤال

مرحبا، أريد أن تقريب أرقام مزدوجة مثل هذا (بعيدا عن الصفر) في 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