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

我需要从十进制或双精度数中得到左边的整数值。例如: 我需要从4.6得到值4。我试过用数学。但是它返回一个双精度值,对 ex: 它从4.6返回4.0。MSDN 文档说明它返回一个整数值。我错过了什么吗?还是有别的方法能达到我的目的?

56119 次浏览

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

如果你想把它当作一个整型数:

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

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

没错。看看宣言,马斯。地板(双)产生一个双(见 http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx)。我假设“整数”的意思是“整数”。

地板将它作为一个双,所以你可以做更多的双重计算。 如果您希望它是一个整型数,那么将 floor 的结果强制转换为整型数。 不要将原始的 double 转换为 int 类型,因为对于负数,floor 的规则是不同的(IIRC)。

The range of double is much wider than the range of int or long. Consider this code:

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范围之外的所有值都是例外,这将是不必要的限制。

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

double myDouble = 4.6;
int myInteger = (int)myDouble;
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))

如果取 4.6,它将返回 4作为输出,这将给出您想要的确切值。