为什么Math.Floor(Double)返回Doubletypes的值?
我需要从十进制或双精度获得左侧的整数值。 例如:我需要从4.6中获得值4。 我尝试使用Math.Floor函数,但它返回一个双精度值,例如:它从4.6返回4.0。 MSDN文档说,它返回一个整数值。 我在这里错过了什么? 或者有什么不同的方式来实现我在找什么? 谢谢。
double
的范围比int
或long
的范围宽得多。 考虑这个代码:
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)。