等于整数的双精度数总是会转换为该整数吗?
等于整数的双精度数是否总是转换为该整数(假设双精度数不是导致溢出的双精度数)。示例: Math.ceil() 将返回一个等于整数的双精度值。假设没有溢出,它是否总是会转换为它应该等于的相同整数?
如果不是,如何将 double
舍入为 int
或 long
?
Will a double equal to an integer always cast to that integer (assuming the double is not one that causes an overflow). Example: Math.ceil() will return a double that is equal to an integer. Assuming no overflow, will it always cast to the same integer that it is supposedly equal to?
If not, how can I round up a double
to an int
or long
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
由于 Java 类型是固定的,并且 Java 双精度数具有 52 位尾数,因此它们可以(轻松地)表示32 位 Java int,不进行舍入。
Since Java types are fixed and Java doubles have a 52 bit mantissa, they can (with ease) represent a 32-bit Java int without rounding.
是的,它会准确转换。 第 5.1.3 节 JLS,其中提到
由于您的
double
完全等于int
,因此“四舍五入”值只是完全相同的值,但您可以阅读规范了解详细信息。Yes, it will convert exactly. This is described in Section 5.1.3 of the JLS, which mentions
Since your
double
exactly equals theint
, the "rounded" value is just the exact same value, but you can read the spec for details.所有可能的
int
值都可以用 double 表示,不会出现错误。最简单的舍入方法是使用 Math.ceil() 例如All possible
int
values can be represented by a double without error. The simplest way to round up is to use Math.ceil() e.g.根据经验,答案似乎是肯定的 - 请注意,它也适用于
i2 = (int) d;
。Empirically, the answer seems to be yes - note that it also works with
i2 = (int) d;
.我相信是这样,但你可以自己测试一下:
I believe so, but you might test it yourself: