天天看點

基本資料類型float和double的差別                                       分享知識 傳遞快樂

                                       分享知識 傳遞快樂

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 才可以。

————————————

如有不妥之處請留言指正。

互相學習,共同進步。