没有内置方法的Round Off

时间:2014-03-25 10:11:24

标签: c# rounding

我想将float变量舍入为int,而不使用任何内置方法。 这就像

13.4 => 13
13.49 => 13
13.5 => 14
13.6 => 14

到目前为止,这是我能够达到的最接近但不确定这是否有效。

int Roundoff(float num)
{
    int temp = (int) num;

    num *= 10;
    if(num%10 >= 5)
    {
        return temp + 1;
    }
    else
    {
        return temp;
    }

}

3 个答案:

答案 0 :(得分:5)

你可以试试这个:

int Roundoff(float num) {
  return num < 0 ? (int) (num - 0.5) : (int) (num + 0.5);
}

负值 技巧(您无法添加0.5):

  -13.9 -> -14.0
  -13.1 -> -13

小心,因为

  int.MaxValue < float.MaxValue
  int.MinValue > float.MinValue

答案 1 :(得分:4)

嗯,你已经在使用铸造,有时这可以满足你的需要。 如果您只是在数字中加0.5,然后转换为整数,您将得到舍入值。

13.4 + 0.5 = 13.9 -> 13 (when casted to int)
13.49 + 0.5 = 13.99 -> 13
13.5 + 0.5 = 14.0 -> 14
13.6 + 0.5 = 14.1 -> 14

这就是你编写方法的方法。

int Roundoff(float num)
{
    return (int) (num + 0.5);
}

答案 2 :(得分:1)

float f = 0.3;  // Or whatever
int i = (int) (f + 0.5f);