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();
}
供参考