在 C# 中,该方法Math.Ceiling
返回一个double
值。为什么不返回int
?
5 回答
double
具有比 更大的值范围int
:
Double 值类型表示一个双精度 64 位数字,其值范围从负 1.79769313486232e308 到正 1.79769313486232e308,以及正或负零、PositiveInfinity、NegativeInfinity 和 Not-a-Number (NaN)。
Double 符合二进制浮点运算的 IEC 60559:1989 (IEEE 754) 标准。
该标准表示它double
具有 52 位尾数,这意味着它可以表示最长为 52 位的任何整数而不会损失精度。
因此,如果输入足够大,则输出不适合int
(只有 32 位)。
文档说明了返回值:
大于或等于 a 的最小整数。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity,则返回该值。
因此返回值必须是 double,因为 NaN、NegativeInfinity 和 PositiveInfinity 是 Double 的字段。
Math.Ceiling
可以返回 adouble
或 a decimal
,具体取决于传入的类型。换句话说,方法的输出类型与输入类型匹配(非常明智)。
他们本可以添加第三个接受 anint
并返回 an 的重载int
,但这并没有太多意义——该函数总是只返回其输入。
您似乎假设 的目的Math.Ceiling
是将浮点值转换为整数,但这通常不是它的使用方式。
它必须返回 double 才能完成。任何涉及 NaN 的数学运算总是返回 NaN。因此,如果您将 NaN 传递给 ceiling() 函数,则无法返回 NaN,因为 Int 中没有等价物。还考虑到 Double 的范围更广,对于那些超出范围的整数值会返回什么?+/- inf 返回什么?
因为double
可以包含比int
或更大的数字long
。同样的原因,没有从double
to隐式转换int
。