已解決求助:變量轉換
提問者:很純潔嘛 | 瀏覽次 | 提問時間:2017-02-10 | 回答數量:9
double db = (double)(5/2);System.out.println(db);複製代碼結果:2請問如何理解這個轉換過程,謝謝!
已有9條答案
說的專業點的話 解釋如下:
Java語言中的float,double類型 都是依照IEEE754標準來進行對數值的轉換的!
至於什麼叫IEEE754標準 這個標準又是什麼樣子的 可以去查下資料 在這就不過多的介紹了!!
此問題 出現的是一個誤區 在java中存在著一種舍入的方式,和我們現實當中的四舍五入不一樣!!
IEEE754標準不支持四舍五入的模式!!隻支持以下幾種舍入模式
1)向最接近的可表示的值;
2)當有兩個最接近的可表示的值時首選“偶數”值;
3)向負無窮大(向 下);
4)向正無窮大(向上)以及向0(截斷)
在java IEEE標準中采取的默認模式是最近舍入方式 對於0.5這樣的數字,采用取偶數的方式
原因是:
由於字長有限,浮點數能夠精確表示的數是有限的,因而也是離散的。在兩個可以精確表示的相鄰浮點數之間,必定存在無窮多實數是IEEE浮點數所無法精確表示的。如何用浮點數表示這些數,IEEE 754的方法是用距離該實數最近的浮點數來近似表示。
對於此問題的 0.5的數字偏向1也不是偏向0也不合適,在計算機內部的運行全都是加法來運行的,乘法 除法 減法 都要轉換成加法來進行運行的,因此就涉及到負數的 原碼、反碼、補碼、移碼
問題,以及涉及到了帶有符號位的二進製計算的問題,此類型在內部都是以補碼的方式進行處理的 而不是以原碼和反碼運行的,因為帶有符號位 計算機處理起來不方便,所以隻能通過補碼的形式來計算
這樣一方麵使符號位能與有效值部分一起參加運算,從而簡化運算規則. 另一方麵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計,具體的可以參考下補碼的轉化過程!
5/2結果是取整
5除以2商2餘1,取整,當然就得2咯
但是得出的2是int型變量,然後將其強製轉換成double型的
double型與int型的區別就在於內存中所占位數不同,在不超過兩者取值的範圍類,機器顯示出的結果是一樣的,所以你的運行顯示結果就是2(double型)
瘋起來要不得丶
回答數:107 | 被采納數:147
結果是 2.0 嗬嗬!!!
不是吧?人家給的結果都是2,我解答的沒錯吧?應該沒有誤人子弟吧?
不相信你自己可以運行下看看
那如果 換成是這樣的話 你覺得又應該輸出什麼值
double db = (double)(5.2/2);
System.out.println(db);
如果按照你的解釋的話 5.2 / 2 是取整數部分 得到個2 輸出double型的2咯
你運行下看看是不是 跟你所想的一樣!
算了neo_pang 我看出來我錯了,我很慚愧!我沒有運行就發言了,樓主,對不起!另外樓主你也誤導了我,你不應該說輸出的是2,我想當然的認為你說的是正確的了。
那你又認為 如何去解答這個問題!!
我隻知道是內部中 帶二進製的數值 轉換成補碼 運行而執行出的返回值!
根據IEEE標準的默認舍取方式 最終出現的2.0結果!!
更詳細的原理解釋 我不是很清楚 你能告訴我下嗎!
回7樓:我更不清楚!你太謙虛了,不過我可以給你推薦幾個網站,上麵有很多Java高手,他們應該會知道,網站:
http://www.j2medev/
http://www.bc-cn/index.html
http://www.java-cn/
break31
回答數:118 | 被采納數:82
因為5和2是整數,所以5/2也是整數,所以顯示2,如果想顯示小數必須把5和2中其中一個用小數表示,如5.0/2