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

97 c# math floor

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

Jon*_*eet 135

的范围double比的范围宽得多的intlong.考虑以下代码:

double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
Run Code Online (Sandbox Code Playgroud)

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

通常,您知道该值实际上int或的范围内long,因此您将其强制转换:

double d = 1000.1234d;
int x = (int) Math.Floor(d);
Run Code Online (Sandbox Code Playgroud)

但是演员的责任在于开发者,而不是他Math.Floor自己.如果它失败并且除了范围之外的所有值都有例外,那将是不必要的限制long.

  • @Jon:慢慢来.事实证明,社区发现将正数乘以-1将使其成为负数.StackOverflow上的一切都很好. (3认同)
  • floor返回double的整数表示,科学计算返回double,这个答案是不正确的,因为double有64位,long也有64位,但是double即使可以正确存储也不能存储低位的精确数字在长。 (2认同)

Nei*_*l N 11

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

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

int result = (int)Math.Floor(yourVariable);
Run Code Online (Sandbox Code Playgroud)

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

  • integer!=`int`(http://www.answers.com/integer) - 整数*可以*存储在`Double`中(参见Jon的答案),并且有无数个整数无法存储在`int`. (3认同)