我需要从十进制或双精度中获取左侧整数值。对于Ex:我需要从4.6获取值4。我尝试使用Math.Floor函数,但它返回一个双精度值,例如:从4.6返回4.0。MSDN文档说它返回一个整数值。我在这里想念什么吗?还是有其他方法可以实现我想要的?
2
MSDN文档说它返回一个整数值。MSDN文档指出Math.Floor返回System.Double,而不是整数。
—
宽带
有效地需要一个整数值,但这并不意味着它可以存储为“ int”或“ long”。一个“双精度”成功地将所有整数值存储在一个比“ int”宽得多的范围内。请注意,当尾数部分的位数为2时,尾数部分的位数不足以存储整数值的所有数字时,可能会舍入某些整数值超过52:对于大于2 ^ 52或小于-2 ^ 52的整数,可能会发生“双精度”整数值的四舍五入,但结果仍将是可表示的最接近的整数;如果使用“(long)Floor(x)”,则转换可能在很大程度上是错误的。
—
verdy_p 2015年
但是请注意,可以用“ double”表示的整数值的有效范围非常大,其绝对值最高为:(1 +(1 − 2 ^ -52))×2 ^ 1023≈1.7976931348623157E308; 它远远超过2 ^ 63-1中的“ long”。但是,可以全部存储的整数范围受到更大限制,因为“双精度”尾数只有52位(加上最高有效位隐含的1位,未存储),这意味着“双精度”只能存储当其绝对值小于2 ^ 53时,整数恰好为整数。
—
verdy_p
不幸的是,如果可能的话,Math.Floor()不会在内部使用“ Long”返回变量“ Number”类型,否则仅对大的舍入整数不返回“ Double”。而且标准的数学库不处理这种统一的变量数字类型。还存在其他实现统一数字类型的数学库,包括以压缩十进制或二进制编码的Long,Double或大整数,而不会损失支持的范围或精度。
—
verdy_p