为什么Math.floor返回一个double?

官方javadoc说Math.floor返回一个“等于一个数学整数”的double,但为什么它不应该返回一个int?


根据相同的javadoc:

如果参数是NaN或无穷大或正零或负零,则结果与参数相同。 不能用int来做到这一点。

最大的双值也大于最大的整数,所以它必须是很长的。


这是为了精确。 双数据类型有一个53位尾数。 除此之外,这意味着一个double可以代表所有2 ^ 53的整体,而不会造成精确度损失。

如果你在一个整数中存储这么大的数字,你会得到一个溢出。 整数只有32位。

以double形式返回整数是正确的做法,因为它提供了比整数更广泛的有用数字范围。


其他人已经告诉过你为什么,我会告诉你如何正确舍入,因为你想这样做。 如果你只打算使用正数,那么你可以使用这个语句:

int a=(int) 1.5;

然而,(int)总是朝0逼近。因此,如果你想做一个负数:

int a=(int) -1.5; //Equal to -1

就我而言,我不想这样做。 我使用下面的代码来完成舍入,它似乎很好地处理了所有边缘案例:

private static long floor(double a)
{
    return (int) Math.floor(a);
}
链接地址: http://www.djcxy.com/p/86625.html

上一篇: Why does Math.floor return a double?

下一篇: How to implement an efficient infinite generator of prime numbers in Python?