Answers:
这是为了精确。double数据类型的尾数为53位。除其他外,这意味着双精度数最多可以表示2 ^ 53的所有整数而没有精度损失。
如果以整数存储这么大的数字,则会溢出。整数只有32位。
将整数返回为双精度是正确的做法,因为它提供了比整数更大的有用数字范围。
其他人已经告诉您原因,我将告诉您如何正确舍入。如果仅使用正数,则可以使用以下语句:
int a=(int) 1.5;
但是,(int)总是四舍五入。因此,如果要做一个负数:
int a=(int) -1.5; //Equal to -1
就我而言,我不想这样做。我使用以下代码进行了四舍五入,似乎可以很好地处理所有边缘情况:
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)
?它可能更有效且更短。
(int) Math.floor(a)
可以简单地编写(int) a
,如果a为正。
这样,错误和其他非整数值可以通过一系列计算正确地级联。
例如,如果将“非数字(NaN)”输入到Math.floor中,它将传递它。
如果返回整数,则无法传递这些状态或错误,并且从较早的计算中可能会得到不好的结果,这些结果看起来不错,但在进一步处理后却出错了。