在 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;
}
我喜欢将浮点数四舍五入到最接近的 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;
}