在 C 中四舍五入到 x.5

Round to x.5 in C

我喜欢将浮点数四舍五入到最接近的 x.5。例如:

-3.64 -> -3.5

-3.12 -> -3.5

-2.90 -> -2.5

-0.45 -> -0.5

0.01  ->  0.5

7.65  ->  7.5

8.45  ->  8.5

9.63   -> 9.5

有没有合适的C语言实现方式?谢谢

注意: 我不想 "round it to nearest half"!请在投票前阅读问题并思考!!

好的! ((int)(f-0.5))+0.5对于正数,我想你会自己找到负数。

做一个简单的 floor(x) + 0.5 怎么样?应该处理正值和负值。如果数字是精确的整数,它们会四舍五入到下一个更高的 +0.5。

floor(0) + 0.5 = 0.5
floor(-1.2) + 0.5 = -1.5
floor(2.2) + 0.5 = 2.5

就像@Stephen 在评论中添加的那样,使用 ceil(x) - 0.5 会产生相同的值,除了精确的整数会向下舍入到下一个最低的 -0.5。即:

ceil(0) - 0.5 = -0.5
ceil(-1.2) - 0.5 = -1.5
ceil(2.2) - 0.5 = 2.5

你可以使用这个功能:

float nearest_x_dot_5(float x)
{
    return round(x - 0.5) + 0.5;
}

Live example