为什么Math.Ceiling返回double?

时间:2011-04-17 12:21:16

标签: c# .net ceiling

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

5 个答案:

答案 0 :(得分:25)

double的值范围大于int

  

Double值类型代表a   双精度64位数   价值范围从负面   1.79769313486232e308至正1.79769313486232e308,以及正负0,   PositiveInfinity,NegativeInfinity,   和非数字(NaN)。

     

Double符合IEC   60559:1989(IEEE 754)标准   二进制浮点运算。

该标准说double有一个52位的尾数,这意味着它可以表示任何长达52位的整数而不会损失精度。

因此,如果输入足够大,则输出不适合int(只有32位)。

答案 1 :(得分:22)

文档说明了返回值:

  

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

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

答案 2 :(得分:6)

Math.Ceiling可以返回doubledecimal,具体取决于传入的类型。换句话说,方法的输出类型与输入类型匹配(非常合理)

他们可以添加第三个重载,它需要int并返回一个int,但是没有太多意义 - 函数总是只返回它的输入。

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

答案 3 :(得分:2)

必须返回double才能完成。任何涉及NaN的数学运算总是返回NaN。因此,如果您将NaN传递给ceiling()函数,则无法返回NaN,因为Int中没有等效项。另外,假设Double具有更宽的范围,那么那些超出范围的整数值会返回什么?为+/- inf返回什么?

答案 4 :(得分:0)

因为double可以包含的数字大于intlong。同样的原因,没有从doubleint的隐式演员。