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

我需要从十进制或双精度获得左侧的整数值。 例如:我需要从4.6中获得值4。 我尝试使用Math.Floor函数,但它返回一个双精度值,例如:它从4.6返回4.0。 MSDN文档说,它返回一个整数值。 我在这里错过了什么? 或者有什么不同的方式来实现我在找什么? 谢谢。

double的范围比intlong的范围宽得多。 考虑这个代码:

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

这个整数在long范围之外 – 那么你会期望发生什么?

通常你知道这个值实际上是在int或者long的范围内,所以你可以这样做:

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

但这个angular色的责任是在开发者Math.Floor ,而不是Math.Floor本身。 对于所有超出long范围的价值而言,它只会失败而不必要地受到限制。

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

如果你想要它作为int:

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

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

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

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

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

地板把它作为一个双重的,所以你可以做更多的双重计算。 如果你想要它作为一个整数,把地板的结果作为一个整数。 不要把原来的double作为整数,因为对于负数,floor的规则是不同的(IIRC)。

Interesting Posts