23

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

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

但事实上,它是

public static double Ceiling (
    double a
)

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

4

1 回答 1

48

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

此方法还可以返回一些特殊值,例如NaN和。PositiveInfinity这只有在返回类型为 时才有可能double

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

int result = (int)Math.Ceiling(a);
于 2011-09-22T08:12:59.827 回答