50

在 C# 中,该方法Math.Ceiling返回一个double值。为什么不返回int

4

5 回答 5

32

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 位)。

于 2011-04-17T12:22:47.947 回答
30

文档说明了返回值:

大于或等于 a 的最小整数。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity,则返回该值。

因此返回值必须是 double,因为 NaN、NegativeInfinity 和 PositiveInfinity 是 Double 的字段。

于 2011-04-17T12:24:15.127 回答
6

Math.Ceiling可以返回 adouble或 a decimal,具体取决于传入的类型。换句话说,方法的输出类型与输入类型匹配(非常明智)。

他们本可以添加第三个接受 anint并返回 an 的重载int,但这并没有太多意义——该函数总是只返回其输入。

您似乎假设 的目的Math.Ceiling是将浮点值转换为整数,但这通常不是它的使用方式。

于 2011-04-17T12:27:35.503 回答
2

它必须返回 double 才能完成。任何涉及 NaN 的数学运算总是返回 NaN。因此,如果您将 NaN 传递给 ceiling() 函数,则无法返回 NaN,因为 Int 中没有等价物。还考虑到 Double 的范围更广,对于那些超出范围的整数值会返回什么?+/- inf 返回什么?

于 2011-04-17T14:28:21.137 回答
0

因为double可以包含比int或更大的数字long。同样的原因,没有从doubleto隐式转换int

于 2011-04-17T12:23:27.643 回答