Java Double,Float求和精度有关问题



Java Double,Float求和精度有关问题。

Java Double,Float求和精度问题
public static void main(String[] args) {

double suctotal=0;

ArrayList<String> sumsuc=new ArrayList<String>();

sumsuc.add(“7684.00″);

sumsuc.add(“0.00″);

sumsuc.add(“43440.00″);

sumsuc.add(“0.20″);

sumsuc.add(“0.30″);

sumsuc.add(“12058.00″);

sumsuc.add(“35216.00″);

sumsuc.add(“4.00″);

sumsuc.add(“0.00″);

sumsuc.add(“229.70″);

sumsuc.add(“25842.00″);

sumsuc.add(“156.20″);

sumsuc.add(“0.10″);

sumsuc.add(“161.50″);

sumsuc.add(“34990.00″);

sumsuc.add(“33696.00″);

sumsuc.add(“137.20″);

sumsuc.add(“197.40″);

sumsuc.add(“35506.00″);

sumsuc.add(“0.10″);

sumsuc.add(“201.60″);

sumsuc.add(“24658.00″);

sumsuc.add(“218.80″);

sumsuc.add(“20536.00″);

sumsuc.add(“268.50″);


sumsuc.add(“15590.00″);

sumsuc.add(“9746.00″);

sumsuc.add(“238.50″);

sumsuc.add(“5592.00″);

sumsuc.add(“0.10″);

sumsuc.add(“123.20″);

sumsuc.add(“2552.00″);

sumsuc.add(“2296.00″);

sumsuc.add(“0.30″);

sumsuc.add(“0.20″);

sumsuc.add(“0.66″);

sumsuc.add(“1438.12″);

DecimalFormat decimalFormat=new DecimalFormat(“##.00″);

for(int i=0;i<sumsuc.size();i++){

suctotal=Double.parseDouble(sumsuc.get(i))+suctotal;

}

System.out.println(“ee “+suctotal);

System.out.println(“ss “+decimalFormat.format(suctotal));

}

输出结果

ee 312778.67999999993

ss 312778.68
1、这是什么情况啊,不太明白啊,谁解释下啊,DecimalFormat 起什么作用啊?
2、为什么会出来那么多的9?
——解决思路———————-
for(int i=0;i<sumsuc.size();i++){

BigDecimal bd1 = new BigDecimal(Double.toString(sumsuc.get(i)));

BigDecimal bd2 = new BigDecimal(Double.toString(suctotal_p));

suctotal_p=bd1.add(bd2).doubleValue();

}

供参考