質問

こんにちは、私は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 / W / 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