6

我想编写一个函数来使用银行家的舍入方法将双精度数舍入为整数(舍入一半到偶数:http ://en.wikipedia.org/wiki/Rounding#Round_half_to_even ),例如:

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 回答