C# - 将浮点数每次都向下舍入

7

如何将浮点数每次四舍五入到最近的整数,但只向下舍入。我需要最快的方法。

这样浮点数1.2将会变成1,而1.8也将会变为1。

1.2f 变为 1.0f

1.8f 变为 1.0f

谢谢!


1
你想要结果是浮点数还是整数类型? - Chimera
5个回答

19

Math.Floor() 在这里是你的好朋友。

示例代码:

using System;
using System.Text;

namespace math
{
    class Program
    {
        static void Main(string[] args)
        {
            //
            // Two values.
            //
            float value1 = 123.456F;
            float value2 = 123.987F;
            //
            // Take floors of these values.
            //
            float floor1 = (float)Math.Floor(value1);
            float floor2 = (float)Math.Floor(value2);

            //
            // Write first value and floor.
            //
            Console.WriteLine(value1);
            Console.WriteLine(floor1);
            //
            // Write second value and floor.
            //
            Console.WriteLine(value2);
            Console.WriteLine(floor2);

            return;        
        }
    }
}

4
通过将其转换为整数,您将截断小数位。
float f = 1.2;
int rounded = (int)f;

3
如你所说,这将会“截断”小数部分。这意味着如果数字是负数,它会向上舍入而不是向下。 - Gigo

2

System.Math.Floor(double)可以解决这个问题。


1

OP希望寻找最快的方法。将数字转换为整数会向零舍入,因此根据范围,您可以添加一个值使其为正数,将其转换为整数,然后减去相同的值,例如。

float a = -5.2f;
float b = (int)(a + 1000) - 1000;

// b = -6.0f

我做了一些基准测试,这种方法至少比使用Math.Floor()快两倍。

  • 现在看来,Math.Floor()的速度也很快。

1
Math.Ceiling(value)
Math.Floor(value); //your answer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接