首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Math.floor会返回一个双精度值?

为什么Math.floor会返回一个双精度值?
EN

Stack Overflow用户
提问于 2009-02-04 15:47:31
回答 6查看 51.6K关注 0票数 118

官方的Javadoc saysMath.floor()返回一个“等于一个数学整数”的double,但是为什么它不应该返回一个int

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-02-04 15:49:14

根据相同的Javadoc:

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

最大的double值也大于最大的int,因此它必须是一个long

票数 87
EN

Stack Overflow用户

发布于 2009-02-04 15:53:12

这是为了精确度。双精度数据类型具有53位尾数。在其他方面,这意味着double可以表示最多2^53的所有整数,而不会造成精度损失。

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

在这里,将整数作为双精度值返回是正确的做法,因为它提供的用法范围比整数大得多。

票数 17
EN

Stack Overflow用户

发布于 2013-10-11 07:17:16

其他人已经告诉了你为什么,我将告诉你如何在你想要这样做的情况下正确地进行舍入。如果您只打算使用正数,则可以使用以下语句:

代码语言:javascript
复制
int a=(int) 1.5;

但是,(int)总是舍入为0。因此,如果你想做一个负数:

代码语言:javascript
复制
int a=(int) -1.5; //Equal to -1

在我的例子中,我不想这样做。我使用以下代码进行舍入,它似乎很好地处理了所有边缘情况:

代码语言:javascript
复制
private static long floor(double a)
{
    return (int) Math.floor(a);
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/511921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档