一.
System.out.println(1-0.8);
上一句的輸出是:
0.19999999999999996
前公司業務跟錢有關
所以在處理小數有關的東西
一律都是用BigDecimal類別
System.out.println((new BigDecimal("1").subtract(new BigDecimal("0.8"))));
上一句的輸出是:
0.2
二.
System.out.println(365*(1+1000000000000000));
上一句的輸出是:
integer number too large: 1000000000000000
要解決這個問題很簡單
只要加個L就解決了
System.out.println(365*(1+1000000000000000L));
這其中的奧妙
就在於JAVA
作四則運算時
會把運算子旁邊的兩個運算元
都提升到較大運算元的型別後
再開始計算
這個叫作Promotion
(
註:Promotion指由小型別換到大型別
這會自動發生
而Cast則指由大型別換到小型別
這就要由程式員特別指定
還有
JAVA基本型別的大小
可以參這篇文章
byte<short<int<long<float<double
浮點數型別的double和float都比整數型別的long還要大
這是因為這float和double
主要用來儲存小數數值,也可以用來儲存範圍更大的整數
)
以本例而言
1+1000000000000000L
在JAVA中所有整數都預設為int
而所有小數都預設為double
但是加了個L
就把該整數提升為long型別
所以
1000000000000000先變成了long
->1+1000000000000000L = int + long = long + long = long
接著365*long = int * long = long * long = long = 365000000000000365
轉成long型別後就能裝下 365000000000000365 這麼大的數字了
diamond edge titanium - vitanium-arts.com
回覆刪除diamond edge titanium - titanium element vitium-arts.com. Product ID: 07978339. titanium tent stakes Product Description. We will nano titanium by babyliss pro give you an 2020 ford ecosport titanium update when we find the missing pieces. The original $3.80 titanium flash mica · In stock