可能重复:
Why doesn't Math.Round/Floor/Ceiling return long or int?
msdn定义了此方法:返回大于或等于指定的双精度浮点数的最小整数。
但事实上,它是
public static double Ceiling (
double a
)
为什么不直接返回int?微软怎么想?
答案 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,或者甚至可能在未经检查的上下文中返回错误的结果。这是不受欢迎的行为。
此方法还可以返回一些特殊值,例如NaN
和PositiveInfinity
。只有在返回类型为double
时才能执行此操作。
如果你认为结果适合int,你可以添加一个显式的强制转换:
int result = (int)Math.Ceiling(a);