格言:在程序猿界混出點名堂约郁!
1.為什么不使用float?
因為float會產生精度丟失的問題精盅。
看如下程序
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999964
System.out.println(a == b);// false
2.我們如何解決這個問題呢?一種很常用的方法是:使用使用 BigDecimal 來定義浮點數的值谜酒,再進行浮點數的運算操作叹俏。
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");
BigDecimal x = a.subtract(b);// 0.1
BigDecimal y = b.subtract(c);// 0.1
System.out.println(x.equals(y));// true
另外還有很多操作 加/減/乘/除/保留小數位等。
3.很重要一點僻族,必須在這里強調
就是BigDecimal的初始化問題我們在使用BigDecimal時粘驰,為了防止精度丟失,推薦使用它的 BigDecimal(String) 構造方法來創(chuàng)建對象述么◎蚴《阿里巴巴Java開發(fā)手冊》對這部分內容也有提到如下圖所示。