解決辦法================== http://blog.javaxxz.com/?p=763 一提到Java里面的商業計算,我們都知道不能用float和double,因為他們無法 進行精確計算。但是Java的設計者給編程人員提供了一個很有用的類BigDecimal,他可以完善float和double類無法進行精確計算的缺 憾。BigDecimal類位於java.maths類包下。首先我們來看下如何構造一個BigDecimal對象。它的構造函數很多,我挑最常用的兩個 來演示一下:一個就是BigDecimal(double val),另一個就是BigDecimal(String str)。 下面是兩個浮點數相減的例子來說明: public static void main(String[] args) { double a = 1; double b = 0.9; BigDecimal a1 = new BigDecimal(Double.toString(a)); BigDecimal b1 = new BigDecimal(Double.toString(b)); BigDecimal a2 = new BigDecimal(a); BigDecimal b2 = new BigDecimal(b); double c = a1.subtract(b1).doubleValue(); double d = a2.subtract(b2).doubleValue(); System.out.println(“c=”+c); System.out.println(“d=”+d); } 結果為: c=0.1 d=0.09999999999999998 可以得出結論: 利用double作為參數的構造函數,無法精確構造一個BigDecimal對象,需要自己指定一個上下文的環境,也就是指定精確位。而利用String對象作為參數傳入的構造函數能精確的構造出一個BigDecimal對象。
Double保留兩位小數方法
//保留2位小數 public static double get2Double(double a){ DecimalFormat df=new DecimalFormat("0.00"); return new Double(df.format(a).toString()); }