第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 double 到 int 轉(zhuǎn)換在 java 中不能按預(yù)期工作?

為什么 double 到 int 轉(zhuǎn)換在 java 中不能按預(yù)期工作?

慕妹3146593 2023-09-27 14:39:12
我已經(jīng)開始閱讀 Java8 的文檔并嘗試了不同的示例代碼。發(fā)現(xiàn)以下奇怪的行為。樣品1Double di = new Double(Math.pow(2,32-1));System.out.printf("%f\n",di.doubleValue()); //2147483648.000000int a= di.intValue();System.out.println(a); //2147483647樣品2Double di = new Double(Math.pow(2,32-1)) - 1.0;System.out.printf("%f\n",di.doubleValue()); //2147483647.000000int a= di.intValue();System.out.println(a); //2147483647為什么在這兩種情況下,int 值返回相同的值?
查看完整描述

3 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

請(qǐng)參閱https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3最后以粗體突出顯示的重要部分:

浮點(diǎn)數(shù)到整型 T 的縮小轉(zhuǎn)換需要兩個(gè)步驟:

第一步,如果 T 為 long,則浮點(diǎn)數(shù)轉(zhuǎn)換為 long;如果 T 為 byte、short、char 或 int,則浮點(diǎn)數(shù)轉(zhuǎn)換為 int,如下所示:

如果浮點(diǎn)數(shù)為 NaN(第 4.2.3 節(jié)),則第一步轉(zhuǎn)換的結(jié)果為 int 或 long 0。

否則,如果浮點(diǎn)數(shù)不是無窮大,則浮點(diǎn)值將四舍五入為整數(shù)值 V,使用 IEEE 754 向零舍入模式(第 4.2.3 節(jié))向零舍入。那么有兩種情況:

如果T是long,并且這個(gè)整數(shù)值可以表示為long,那么第一步的結(jié)果就是long值V。

否則,如果這個(gè)整數(shù)值可以表示為int,那么第一步的結(jié)果就是int值V。

否則,必須滿足以下兩種情況之一:

該值必須太?。ù蠓鹊呢?fù)值或負(fù)無窮大),并且第一步的結(jié)果是 int 或 long 類型的最小可表示值。

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

也就是說,你的雙精度值是 2147483648 (你可以嘗試使用更大的數(shù)字)。int int 的最高可表示值是 2147483647。這就是為什么你最終得到 2147483647。


查看完整回答
反對(duì) 回復(fù) 2023-09-27
?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

int這是因?yàn)镴ava 中類型的最大值是2147483647。當(dāng)您調(diào)用時(shí),Double::doubleValue如果您嘗試轉(zhuǎn)換的值超出范圍并且此方法的文檔中有說明,它將執(zhí)行縮小轉(zhuǎn)換:

在縮小基元轉(zhuǎn)換后,以 int 形式返回此 Double 的值。

它甚至指向JLS 5.1.3,其中描述了這種縮小轉(zhuǎn)換。

轉(zhuǎn)換浮點(diǎn)值需要兩個(gè)步驟。第一步、第三點(diǎn)、選項(xiàng) b 的句子中解釋了您看到此值的原因:

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

浮點(diǎn)數(shù)到整型 T 的縮小轉(zhuǎn)換需要兩個(gè)步驟:

  1. 第一步,如果 T 為 long,則浮點(diǎn)數(shù)轉(zhuǎn)換為 long;如果 T 為 byte、short、char 或 int,則浮點(diǎn)數(shù)轉(zhuǎn)換為 int,如下所示:

  • 如果浮點(diǎn)數(shù)為 NaN(第 4.2.3 節(jié)),則第一步轉(zhuǎn)換的結(jié)果為 int 或 long 0。

  • 否則,如果浮點(diǎn)數(shù)不是無窮大,則浮點(diǎn)值將四舍五入為整數(shù)值 V,使用 IEEE 754 向零舍入模式(第 4.2.3 節(jié))向零舍入。那么有兩種情況:

  • a如果T是long,并且這個(gè)整數(shù)值可以表示為long,那么第一步的結(jié)果就是long值V。

  • b否則,如果這個(gè)整數(shù)值可以表示為int,那么第一步的結(jié)果就是int值V。

  • 否則,必須滿足以下兩種情況之一:

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

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

在第二步中:

  • 如果T是int或者long,轉(zhuǎn)換的結(jié)果就是第一步的結(jié)果。

  • 如果 T 是字節(jié)、字符或短整型,則轉(zhuǎn)換結(jié)果是第一步結(jié)果縮小轉(zhuǎn)換為類型 T(第 5.1.3 節(jié))的結(jié)果。

因此,在這種情況下,結(jié)果將是 type 的最大可表示值int


查看完整回答
反對(duì) 回復(fù) 2023-09-27
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

int值不能超過Integer.MAX_VALUE,即2147483647。當(dāng)調(diào)用intValue()時(shí),您自愿放棄所有尾部。



查看完整回答
反對(duì) 回復(fù) 2023-09-27
  • 3 回答
  • 0 關(guān)注
  • 167 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)