为什么Math.Ceiling返回double?

Mac*_*sCK 41 .net c# ceil

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

Jon*_*Jon 26

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

  • 那为什么不回来很久呢? (2认同)

Rof*_*ion 22

文档说明了返回值:

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

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

  • 你混淆了原因和后果.文档是这样说的,因为它是以这种方式实现的.它的CLR团队将返回值实现为`int`,那么就没有关于`NaN`等的单词所以-1,抱歉. (7认同)
  • 除了`Math.Ceiling`也可以返回一个`decimal`,它没有'NaN`,`NegativeInfinity`或`PositiveInfinity`字段. (5认同)
  • @Dmitry:但是当传递NaN或无穷大的值时,函数将是未定义的.(这就是为什么它在给定小数时可以返回小数,因为那些不能是NaN或无穷大.) (3认同)
  • @Dmitry:我不确定你是否已经掌握了这一点.天花板(Int)将毫无用处. (2认同)
  • @Joe:哦,我不期望应该有`int`类型的参数,它绝对没用.我只是试图证明如果有一个`int`参数,那么返回值应该是一个`int`,即如果你使用一些简单的数字计算,你希望得到你传入的内容. (2认同)

Mus*_*sis 6

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

他们可以添加一个第三个重载,它接受int并返回一个int,但是没有太多指向这个 - 函数总是只返回它的输入.

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