您好我想圆双号这样在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/数字/数学/地板 HTTP://en.cppreference。 COM /瓦特/ CPP /数字/数学/地板

或,由于大同,非功能版本:

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