C# 舍入无内建法

C# 舍入无内建法,c#,rounding,C#,Rounding,我想将浮点变量舍入为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; } el

我想将浮点变量舍入为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;
    }

}

嗯,你已经在使用铸造,有时这可以给你确切的你需要的。 如果您只需在数字中添加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);
}
您可以尝试以下方法:

int Roundoff(float num) {
  return num < 0 ? (int) (num - 0.5) : (int) (num + 0.5);
}
而且要小心,因为

int.MaxValuefloat.MinValue

虽然我没有提到处理负值,但将其标记为答案,因为它涵盖了这两个方面。里兹的解释帮助了我。
int Roundoff(float num) {
  return num < 0 ? (int) (num - 0.5) : (int) (num + 0.5);
}
  -13.9 -> -14.0
  -13.1 -> -13
  int.MaxValue < float.MaxValue
  int.MinValue > float.MinValue