7

こんにちは私はC++でこのように(ゼロから離れて)2つの数値を丸めたいです:

  4.2 ---->   5
  5.7 ---->   6
 -7.8 ---->  -8
-34.2 ----> -35

これを行うための効率的な方法は何ですか?

4

4 に答える 4

25
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);
于 2009-08-25T07:16:51.207 に答える
3

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;
}
于 2009-08-25T07:21:10.510 に答える
0

試す

 double rounded = _copysign(ceil(abs(x)), x);
于 2009-08-25T07:15:26.857 に答える