分享知識 傳遞快樂
float:單精度浮點數
double:雙精度浮點數
兩者的主要差別如下:
Float
- 單精度浮點數在機記憶體占4個位元組
- 單精度浮點數有效數字8位
- 單精度浮點數的表示範圍:-2^128 ~ +2^128(float的指數範圍為-127~128),
- CPU處理單精度浮點數的速度比處理雙精度浮點數快
Double
- 雙精度浮點數在機記憶體占8個位元組
- 雙精度浮點數有效數字16位
- 雙精度浮點數的表示範圍:-2^1024 ~ +2^1024(double的指數範圍為-1023~1024)
在金融領域或金額計算中,使用 float?還是 double?
答:兩者都不建議使用,float 和 double 在計算中會喪失精度,是以推薦使用 BigDecimal 。下面提供幾個例子以便更好的說明:
double a = 2;
double b = 1.1;
System.out.println(a - b);
結果:0.8999999999999999
//....
double a = 3;
double b = 0.1;
System.out.println(a * b);
結果:0.30000000000000004
注意:
BigDecimal 可以表示任意精度的小數,并對它們進行計算。這裡要注意使用 BigDecimal 構造函數,因為它會在計算的過程中會産生舍入誤差。最好要使用基于整數或 String 的構造函數來建立BigDecimal對象。關于 BigDecimal 就不在些詳細介紹,另有一篇文章詳細介紹。使用請參考《BigDecimal詳細使用》
BigDecimal基本使用方法:
- add():加法
- subtract():減法
- multipy():乘法
- divide():除法
- abs():絕對值
附:
1. java中 3 * 0.1 == 0.3 将會傳回什麼?true 還是 false?
答:false,因為浮點數不能完全精确的表示出來,會損失其精度。
2. java中float a = 3.4;是否正确?
答:不正确。
原因:3.4是雙精度數,将雙精度型 double 指派給浮點型 float 屬于向下轉型會造成精度損失,是以需要強制類型轉換float a = (float)3.4;或者寫成 float a = 3.4f 才可以。
————————————
如有不妥之處請留言指正。
互相學習,共同進步。