为什么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可以包含大于intlong数字。 同样的原因,没有从doubleint隐式转换。