为什么C#Math.Floor()返回Double而不是Int

Jie*_*eng 16 c#

可能重复:
为什么Math.Floor(Double)返回Double类型的值?

为什么C#Math.Floor()返回double而不是int

来自MSDN文档:

返回小于或等于指定的双精度浮点数的最大整数

它说它返回一个整数.它可以返回一个double,我总是把它投到一个int但它只是很奇怪,不是吗?

use*_*erx 39

不是真的,考虑到a double可能比a更高int.你不希望溢出一个带有double的大值的int.

只是为了告诉你我的意思:

Double.MaxValue = 1.7976931348623157E + 308

Integer.MaxValue = 2,147,483,647

所以你可以有一个3,000,000,000.50的双倍,并且它会超出int的最大值.

  • 这是一个很好的解释,为什么它有意义...解释为什么它是这样的方式更简单 - FPU结果是一个'double`.因为很多时候你想把它用作`double`(可能从参数中减去它,得到小数部分),转换它然后必须将其转换回来是没有意义的. (3认同)
  • 如果它是一个大小的东西,他们肯定可以返回一个长/ Int64? (2认同)
  • @mynye - 即使是Long/Int64也不够大.Int64的MaxValue为9,223,372,036,854,775,807,即9E + 18.双倍可以大到1E + 308,这是一个更大的.原因是double(和单数/小数)的部分结构表示分数的指数.双打和Ints非常不同,用途非常不同.我不会说将int表示为double是更好的,因为可能存在double可能不太精确的情况(我不确定,double的分数为53位,绝对是真的一个虽然). (2认同)