我需要从小数或双精度得到左侧整数值。对于Ex:我需要从4.6获得值4。我尝试使用Math.Floor函数,但它返回一个double值,例如:它从4.6返回4.0。 MSDN文档说它返回一个整数值。我在这里错过了什么吗?或者有不同的方式来实现我正在寻找的东西?
答案 0 :(得分:131)
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);
但该演员的责任在于开发人员,而不是Math.Floor
本身。如果只是因为long
范围之外的所有值的例外而失败将是不必要的限制。
答案 1 :(得分:11)
根据MSDN,Math.Floor(double)返回一个双精度:http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
如果你想把它作为一个int:
int result = (int)Math.Floor(yourVariable);
我可以看到MSDN文章如何误导,他们应该指定虽然结果是“整数”(在这种情况下意味着整数)但它仍然是TYPE Double
答案 2 :(得分:4)
如果您只需要数字的整数部分,请将数字转换为int
。这将截断小数点的数字。
double myDouble = 4.6;
int myInteger = (int)myDouble;
答案 3 :(得分:0)
这是正确的。看一下声明,Math.Floor(double)产生一个double(见http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx)。我假设“整数”表示“整数”。
答案 4 :(得分:0)
Floor将它保留为double,因此您可以使用它进行更多的双重计算。 如果您希望它作为int,则将floor的结果转换为int。 不要将原始双精度转换为int,因为负数的底线规则不同(IIRC)。
答案 5 :(得分:0)
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))
如果您将4.6
作为输出返回4
,这将为您提供所需的确切值。