我想编写一个函数,使用Banker的Rounding方法将double转换为int(舍入一半到偶数: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;
}
}
}
但这很慢,我甚至不确定它是否准确。
是否有一些快速准确的方法来做到这一点。
答案 0 :(得分:3)
使用标准lrint
功能;在默认的舍入模式下,它可以提供您想要的结果。
答案 1 :(得分: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);