116

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

4

6 回答 6

159

的范围doubleint或的范围大得多long。考虑这段代码:

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

整数超出了long- 那么您期望会发生什么?

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

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

但是该演员的责任在于开发人员,而不是Math.Floor其本身。对于long.

于 2009-08-28T19:42:07.273 回答
13

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

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

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

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

于 2009-08-28T19:31:58.230 回答
4

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

double myDouble = 4.6;
int myInteger = (int)myDouble;
于 2009-08-28T19:54:32.133 回答
0

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

于 2009-08-28T19:32:27.917 回答
0

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

于 2009-08-28T19:33:08.697 回答
0
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))

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

于 2018-01-16T07:10:58.997 回答