如何双为int在Java中投工作(How does double to int cast work

2019-06-18 05:50发布

我是新来的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类型或长的最大可表示值。

(这里的第二个步骤是无关紧要的,当Tint 。)

在大多数情况下,我预计这将使用硬件支持来实现 -浮点数转换成整数的一些东西,通常是由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