在C#中,方法Math.Ceiling
返回double
值。为什么不返回int
?
答案 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
可以返回double
或decimal
,具体取决于传入的类型。换句话说,方法的输出类型与输入类型匹配(非常合理)
他们可以添加第三个重载,它需要int
并返回一个int
,但是没有太多意义 - 函数总是只返回它的输入。
您似乎假设Math.Ceiling
的目的是将浮点值强制转换为整数,但这通常不是它的使用方式。
答案 3 :(得分:2)
必须返回double才能完成。任何涉及NaN的数学运算总是返回NaN。因此,如果您将NaN传递给ceiling()函数,则无法返回NaN,因为Int中没有等效项。另外,假设Double具有更宽的范围,那么那些超出范围的整数值会返回什么?为+/- inf返回什么?
答案 4 :(得分:0)
因为double
可以包含的数字大于int
或long
。同样的原因,没有从double
到int
的隐式演员。