我需要从一个十进制或双精度数中获取左侧整数值,例如:我需要从4.6中获取值4。我尝试使用Math.Floor函数,但它返回的是一个双精度数,例如:它从4.6返回4.0。MSDN文档说它返回一个整数值。我错过了什么吗?或者有没有其他方法可以实现我要找的功能?
我需要从一个十进制或双精度数中获取左侧整数值,例如:我需要从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);
但是,这种类型转换的责任在于开发人员,而不是Math.Floor
本身。让它仅针对long
范围之外的所有值失败并抛出异常是没有必要的束缚。
int result = (int)Math.Floor(yourVariable);
我看得出来MSDN文章可能会误导人,他们应该明确指出,虽然结果是一个“整数”(在这种情况下意味着整数),但它仍然是Double类型。
int
(http://www.answers.com/integer)- 整数可以存储在Double
中(请参见Jon的回答),而有无限数量的整数不能存储在int
中。 - Shog9int
类型即可。这会在小数点处截断数字。double myDouble = 4.6;
int myInteger = (int)myDouble;
int
与Floor
的行为不同。
Floor
总是截断为最小的负数,而将其转换为int
会朝向0进行截断。 - MagnusConvert.ToInt32(Math.Floor(Convert.ToDouble(value)))
这将给你精确的值,就像如果你取4.6
它会返回4
作为输出。
Floor将其保留为double,因此您可以对其进行更多的double计算。 如果您想将其作为int使用,请将floor的结果转换为int。 不要将原始double转换为int,因为负数的floor规则与正数不同(如果我没记错的话)。