6

次のように、Banker の Rounding メソッド (半分を偶数に丸める: http://en.wikipedia.org/wiki/Rounding#Round_half_to_even )を使用して、double を int に丸める関数を書きたいと思います。

int RoundToInt(double x);

どうやってやるの?

更新

私が得ることができる最高のものはこれです:

int RoundToInt(double x)
{
  int s = (int)x;
  double t = fabs(x - s);

  if ((t < 0.5) || (t == 0.5 && s % 2 == 0))
  {
    return s;
  }
  else
  {
    if (x < 0)
    {
      return s - 1;
    }
    else
    {
      return s + 1;
    }
  }
}

しかし、これは遅く、正確かどうかさえわかりません。

これを行うための迅速かつ正確な方法はありますか。

4

2 に答える 2

4

標準lrint機能を使用します。デフォルトの丸めモードでは、必要な結果が正確に得られます。

于 2012-06-01T06:12:11.393 に答える
1
double decimal = x % 1;
if(decimal < 0.5) return (int)x;
if(decimal > 0.5) return (int)x + 1;
return (int)x + ((int)x % 2 == 1 ? 1 : 0);
于 2012-06-01T06:11:02.727 に答える