为什么math.Ceiling(double a)不直接返回int?

Sle*_*ght 21 .net c# frameworks base-class-library

可能重复:
为什么Math.Round/Floor/Ceiling不返回long或int?

msdn定义了此方法:返回大于或等于指定的双精度浮点数的最小整数.

但事实上,确实如此

public static double Ceiling (
    double a
)
Run Code Online (Sandbox Code Playgroud)

为什么不直接返回int?微软怎么想?

Mar*_*ers 46

这是因为a double(±5.0×10 -324到±1.7×10 308)的范围远远大于int(-2,147,483,648到2,147,483,647)的范围.如果返回类型int很多可能的输入将失败.例如,Math.Ceiling可能被强制OverflowException在已检查的上下文中抛出,或者甚至可能在未经检查的上下文中返回不正确的结果.这是不受欢迎的行为.

此方法还可以返回一些特殊值,例如NaNPositiveInfinity.只有返回类型是这样才可能double.

如果您认为结果适合int,则可以添加显式强制转换:

int result = (int)Math.Ceiling(a);
Run Code Online (Sandbox Code Playgroud)