如何将浮点数每次四舍五入到最近的整数,但只向下舍入。我需要最快的方法。
这样浮点数1.2将会变成1,而1.8也将会变为1。
1.2f 变为 1.0f
1.8f 变为 1.0f
谢谢!
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;
}
}
}
float f = 1.2;
int rounded = (int)f;
System.Math.Floor(double)
可以解决这个问题。
OP希望寻找最快的方法。将数字转换为整数会向零舍入,因此根据范围,您可以添加一个值使其为正数,将其转换为整数,然后减去相同的值,例如。
float a = -5.2f;
float b = (int)(a + 1000) - 1000;
// b = -6.0f
我做了一些基准测试,这种方法至少比使用Math.Floor()快两倍。
Math.Ceiling(value)
Math.Floor(value); //your answer