2

数値を最も近い偶数に切り下げるように設計された関数があります。

double round(double d)
{
  floor(d + 0.5);
  if(d % 2 == 1)
  {
      d = d-1;
  }
  return d;
}

ただし、コードをコンパイルしようとすると、「式には整数型または列挙型が必要です」というエラーが返されます。エラーは、if ステートメントと同じ行から報告されます。

誰かが私を正しい方向に向けることができますか?

4

5 に答える 5

5

% 演算子は整数に対してのみ定義されています。fmod() 関数を使用します。

ビルの適切な実装については正しいround(double x)

于 2013-06-06T18:11:14.087 に答える
2

floor()関数は double を返します。

double floor (double x);

intまたはのような「整数型」ではなく、浮動小数点型charです。結果を四捨五入して破棄するfloor(d + 0.5);whichを呼び出す代わりに、次のようなものが必要です。d

int i = static_cast<int>(floor(d + 0.5));
于 2013-06-06T18:13:04.217 に答える
0
return floor(d/2 + 0.5) * 2;

もちろん、倍数は近似値です。10^50 の場合、おそらく偶数は得られません。

于 2013-06-06T18:13:21.653 に答える
0

floor はその場では機能せず、floor-ed 値を返します。また、 % は整数に適用されるため、再利用できませんd。あなたが望むものは:

  int i = floor(d + 0.5);
  if(i % 2 == 1)
  {
      i = i-1;
  }
  return i;
于 2013-06-06T18:14:40.410 に答える