(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類型的時候才起到連接作用,否則仍然是運算符。