为什么Math.Ceiling返回double?
在C#中, Math.Ceiling
方法返回一个double
值。 为什么它不返回int
?
文档中提到了返回值:
最小的整数大于或等于a。 如果a等于NaN,NegativeInfinity或PositiveInfinity,则返回该值。
因此,返回值必须是双倍的,因为NaN,NegativeInfinity和PositiveInfinity是Double的字段。
double
具有比int
更大的值范围:
Double值types表示一个双精度64位数值,其值范围从负1.79769313486232e308到正1.79769313486232e308,以及正或负零,PositiveInfinity,NegativeInfinity和非数字(NaN)。
双符合二进制浮点algorithm的IEC 60559:1989(IEEE 754)标准。
这个标准说double
有一个52位的尾数,这意味着它可以代表长达52位的任何整数而不会损失精度。
因此,如果input足够大,输出不适合int
(只有32位)。
Math.Ceiling
可以返回一个double
或者decimal
,这取决于传入的types。换句话说,方法的输出types与inputtypes(非常明智)相匹配。
他们可能已经添加了第三个重载,它接受一个int
并返回一个int
,但是没有多less指向 – 函数总是返回它的input。
您似乎认为Math.Ceiling
的目的是将一个浮点值转换为一个整数,但通常不是如何使用的。
它必须返回一倍才能完成。 涉及NaN的任何math运算总是返回NaN。 因此,如果您将NaN传递给ceiling()函数,则无法返回NaN,因为在Int中没有等效项。 还有,Double有更宽的范围,那些超出范围的整数值会返回什么? 什么是回报+/-信息?
因为double
可以包含大于int
或long
数字。 同样的原因,没有从double
到int
隐式转换。