如何使用Banker在C中的舍入将double转换为int

EFa*_*nZh 6 c algorithm rounding

我想编写一个函数,使用Banker的Rounding方法将double转换为int(舍入一半到偶数:http://en.wikipedia.org/wiki/Rounding#Round_half_to_even),如:

int RoundToInt(double x);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

更新:

我能得到的最好的是:

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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但这很慢,我甚至不确定它是否准确.

有没有一些快速准确的方法来做到这一点.

R..*_*R.. 5

使用标准lrint功能;在默认舍入模式下,它给出的正是您想要的结果。