如何使用 C 中的银行家舍入将双精度四舍五入为 int



我想编写一个函数,使用Banker的舍入方法将双精度四舍五入为整数(四舍五入到偶数: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;
    }
  }
}

但这很慢,我什至不确定它是否准确。

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

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

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);

最新更新