为什么Math.Floor(Double)返回Double类型的值?

时间:2009-08-28 19:28:32

标签: c# math floor

我需要从小数或双精度得到左侧整数值。对于Ex:我需要从4.6获得值4。我尝试使用Math.Floor函数,但它返回一个double值,例如:它从4.6返回4.0。 MSDN文档说它返回一个整数值。我在这里错过了什么吗?或者有不同的方式来实现我正在寻找的东西?

6 个答案:

答案 0 :(得分:131)

double的范围远远大于intlong的范围。请考虑以下代码:

double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality

整数超出long的范围 - 所以你期望发生什么?

通常您知道实际的值将在intlong的范围内,因此您将其投射:

double d = 1000.1234d;
int x = (int) Math.Floor(d);

但该演员的责任在于开发人员,而不是Math.Floor本身。如果只是因为long范围之外的所有值的例外而失败将是不必要的限制。

答案 1 :(得分:11)

根据MSDN,Math.Floor(double)返回一个双精度:http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx

如果你想把它作为一个int:

int result = (int)Math.Floor(yourVariable);

我可以看到MSDN文章如何误导,他们应该指定虽然结果是“整数”(在这种情况下意味着整数)但它仍然是TYPE Double

答案 2 :(得分:4)

如果您只需要数字的整数部分,请将数字转换为int。这将截断小数点的数字。

double myDouble = 4.6;
int myInteger = (int)myDouble;

答案 3 :(得分:0)

这是正确的。看一下声明,Math.Floor(double)产生一个double(见http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx)。我假设“整数”表示“整数”。

答案 4 :(得分:0)

Floor将它保留为double,因此您可以使用它进行更多的双重计算。 如果您希望它作为int,则将floor的结果转换为int。 不要将原始双精度转换为int,因为负数的底线规则不同(IIRC)。

答案 5 :(得分:0)

Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))

如果您将4.6作为输出返回4,这将为您提供所需的确切值。