我是新来的Java,并想知道如何双为int科协工作? 据我所知,这是简单的长走低端32位整型,但约一倍(64位)为int的内容(32位)? 从二进制双那些64位是在双精度浮点数(尾数),所以它是如何转换为内部中断?
Answer 1:
这一切都记录在第5.1.3节中JLS的。
在第一步骤中,浮点数会被转换成一个长,如果T是长,或者为int,如果T是字节,短,炭或int,如下所示:
如果浮点数是NaN(§4.2.3),转换的第一步的结果是一个int或长0。
否则,如果浮点数不是无穷大,浮点值舍入为一个整数值V,使用IEEE 754取朝向零模式(§4.2.3)向零舍入。 然后有两种情况:
如果T是长,并且该整数值可表示为第一步骤中的长,那么结果是长值V.
否则,如果该整数的值可以被表示为一个int,则第一步骤的结果是int值V.
否则,以下两种情况之一必须是真实的:
该值必须是太小(大的幅度或负无穷大的负值),并且所述第一步骤的结果是int类型或长的最小可表示值。
该值必须是过大(大的幅度或正无穷大的正的值),并且所述第一步骤的结果是int类型或长的最大可表示值。
(这里的第二个步骤是无关紧要的,当T
是int
。)
在大多数情况下,我预计这将使用硬件支持来实现 -浮点数转换成整数的一些东西,通常是由CPU的处理。
Answer 2:
如果你使用(INT)演员,因为你可能会注意到的Java截断它的价值:
double d = 2.4d;
int i = (int) d;
System.out.println(i);
d = 2.6;
i = (int) d;
System.out.println(i);
输出:
2
2
除非你使用Math.round,Math.ceil,Math.floor ...
Answer 3:
您可能需要阅读Java规范:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3
有关节5.1.3 - “基本收缩转换”。
文章来源: How does double to int cast work in Java