關於double精確度的簡單問題


(1)測試TestDouble.java結果 

 

 

結果:如圖,使用double類型的數據進行運算時結果是不准確的。

原因:double類型的數值占用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次       方)。

(2)測試TestBigDecimal.java結果

結果:如圖,用字符串類型計算的數據是對的,而double類型依舊是不對的。

原因:對於double型,小數點后面是0的話,精度就是0;小數點后面不是0,則取決於整數位的位數,整數位越多,精度越小;當整數位接近15位時,精度就       趨於0,再多1位數據可能開始溢出(具體情況取決於double類型的數值表示)。

      對於字符串類型的構造函數,小數點后面有幾位,精度就是幾位,而且幾乎沒有位數限制。

(3)區分連接符與加號

結果:先輸出字符串則后面也是字符串形式;先輸出加法運算則正常運算。

原因:在System.out.println()中,如果在string字符串后面是+和變量,會把變量轉換成string類型,加號起連接作用,然后把兩個字符串連接成一個新的       字符串輸出;

      如果先有變量的加減運算再有字符串,那么會從左到右先計算變量的加減,然后再與后面的string結合成一個新的字符串。也就是說加號只有在兩個         string類型或者其中一個是string類型的時候才起到連接作用,否則仍然是運算符。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM