HOWTO · Csharp

在 C# 中把浮点数转换为 Int

在 C# 中,有 4 种主要方法可用于将浮点数转换为 int,显式类型转换方法,Math.Ceiling()函数,Math.Floor()函数和 Math.Round()函数。

本页内容

在 C# 中将 float 转换为 int 时,应根据你希望如何处理小数部分来选择操作:直接强制转换会向零截断,Math.Ceiling() 会向正无穷方向舍入,Math.Floor() 会向负无穷方向舍入,而 Math.Round() 会选取最接近的整数。每种转换都会生成 int,因此输入中的小数部分可能会改变数值。

在 C# 中使用显式类型转换将 Float 转换为 Int

如果只想去掉小数部分,直接强制转换是最简单的选择。它会向零截断,因此正数和负数都会朝零的方向变化,而不是朝负无穷的方向变化。下面的完整程序演示了这两种符号的转换:

using System;

class Program
{
    static void Main()
    {
        float positive = 10.9f;
        float negative = -10.9f;

        int positiveResult = (int)positive;
        int negativeResult = (int)negative;

        Console.WriteLine(positiveResult);
        Console.WriteLine(negativeResult);
    }
}

强制转换会去掉小数部分,同时保持数值朝零变化:例如,10.9f 会变成 10,-10.9f 会变成 -10。结果变量的类型是 int。此处提供了代码示例,但本次写作阶段并未执行该示例。

在 C# 中使用 Math.Ceiling() 函数将 Float 转换为 Int

当你希望数值向正无穷方向舍入时,可以使用 Math.Ceiling()。该方法返回 double,因此调用后还需将结果强制转换为 int。对于负数,向正无穷方向舍入会使数值更接近零:

using System;

class Program
{
    static void Main()
    {
        float positive = 10.2f;
        float negative = -10.2f;

        int positiveResult = (int)Math.Ceiling(positive);
        int negativeResult = (int)Math.Ceiling(negative);

        Console.WriteLine(positiveResult);
        Console.WriteLine(negativeResult);
    }
}

这里,Math.Ceiling() 会先沿数轴向上舍入每个值,然后再进行强制转换;强制转换会将得到的整数值存储为 int。例如,正数输入会变成 11,负数输入会变成 -10。此示例在本次写作阶段并未执行。

在 C# 中使用 Math.Floor() 函数将 Float 转换为 Int

当你希望数值向负无穷方向舍入时,可以使用 Math.Floor()。与 Math.Ceiling() 一样,它返回 double;若要存储为整数,请将其结果强制转换为 int:

using System;

class Program
{
    static void Main()
    {
        float positive = 10.2f;
        float negative = -10.2f;

        int positiveResult = (int)Math.Floor(positive);
        int negativeResult = (int)Math.Floor(negative);

        Console.WriteLine(positiveResult);
        Console.WriteLine(negativeResult);
    }
}

向负无穷方向舍入后,正数输入得到 10,负数输入得到 -11。这与直接强制转换不同,因为负数的小数部分在直接转换时会向零截断。两个结果变量的类型都是 int。此示例在本次写作阶段并未执行。

在 C# 中使用 Math.Round() 函数将 Float 转换为 Int

如果需要最接近的整数,可以使用 Math.Round()。它返回 double,可以再强制转换为 int。这里的输入都不是正好位于两个整数中间的值,因此示例不涉及中点舍入规则:

using System;

class Program
{
    static void Main()
    {
        float positive = 10.8f;
        float negative = -10.8f;

        int positiveResult = (int)Math.Round(positive);
        int negativeResult = (int)Math.Round(negative);

        Console.WriteLine(positiveResult);
        Console.WriteLine(negativeResult);
    }
}

最接近的整数分别是 11 和 -11。转换过程中,小数值确实会改变;当任务需要按最接近的值舍入时,Math.Round() 很有用,但它并非在所有情况下都优于其他转换方式。结果的类型是 int。此示例在本次写作阶段并未执行。