[英]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類型的最大可表示值。
(當T
為int
時,這里的第二步是無關緊要的。)
在大多數情況下,我希望使用硬件支持來實現 - 將浮點數轉換為整數通常由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.