这个方法在msdn上被定义为:返回大于或等于指定的双精度浮点数的最小整数。
但事实上它是
public static double Ceiling (
double a
)
为什么不直接返回整数?微软是怎么想的?
这个方法在msdn上被定义为:返回大于或等于指定的双精度浮点数的最小整数。
但事实上它是
public static double Ceiling (
double a
)
为什么不直接返回整数?微软是怎么想的?
这是因为 double
的范围(±5.0 × 10−324 to ±1.7 × 10308)比 int
的范围(-2,147,483,648 到 2,147,483,647)大得多。如果返回类型为 int
,则许多可能的输入将失败。例如,Math.Ceiling
可能会在checked 上下文中强制抛出一个 OverflowException
,或者在未经检查的上下文中甚至可能返回一个不正确的结果。这种行为是不可取的。
此外,一些特殊值(如 NaN
和 PositiveInfinity
)只有当返回类型为 double
时才能返回。
如果您确信结果适合 int,则可以添加显式转换:
int result = (int)Math.Ceiling(a);
double
可以容纳每个一半的倍数,最大可达2^52,比Int32
的2^31范围要大得多(但比Int64
的2^63范围要小)。 - supercatint
会截断小数部分,因此如果你的十进制数被渲染为 1.9999998675,你最终可能得到的结果是 1。而Convert.ToInt32()
方法则会四舍五入。 - IronSean