簡體   English   中英

如何在Java中使用double轉換為int

[英]How does double to int cast work in Java

我是Java的新手,想知道如何對int轉換工作? 我理解通過采用低32位來實現long很簡單,但是對於int(32位)來說,加倍(64位)呢? 來自二進制二進制的64位是雙精度浮點格式(尾數),那么它如何在內部轉換為int?

這些都記錄在JLS的5.1.3節中。

在第一步中,浮點數轉換為long(如果T為long)或轉換為int(如果T為byte,short,char或int),如下所示:

如果浮點數為NaN(§4.2.3),則轉換的第一步結果為int或long 0。

  • 否則,如果浮點數不是無窮大,則浮點值將四舍五入為整數值V,使用IEEE 754舍入為零的模式(第4.2.3節)向零舍入。 然后有兩種情況:

    • 如果T很長,並且該整數值可以表示為long,則第一步的結果是長值V.

    • 否則,如果此整數值可以表示為int,則第一步的結果是int值V.

  • 否則,以下兩種情況之一必須為真:

    • 該值必須太小(大幅度或負無窮大的負值),第一步的結果是int或long類型的最小可表示值。

    • 該值必須太大(大幅度或正無窮大的正值),第一步的結果是int或long類型的最大可表示值。

(當Tint時,這里的第二步是無關緊要的。)

在大多數情況下,我希望使用硬件支持來實現 - 將浮點數轉換為整數通常由CPU處理。

如果您使用(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 ......

您可能想要閱讀Java規范:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3

相關部分是5.1.3 - “縮小原始轉換”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM