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

时间:2011-09-22 08:10:40

标签: c# .net frameworks base-class-library

  

可能重复:
  Why doesn't Math.Round/Floor/Ceiling return long or int?

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

但事实上,它是

public static double Ceiling (
    double a
)

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

1 个答案:

答案 0 :(得分:46)

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

此方法还可以返回一些特殊值,例如NaNPositiveInfinity。只有在返回类型为double时才能执行此操作。

如果你认为结果适合int,你可以添加一个显式的强制转换:

int result = (int)Math.Ceiling(a);