Java Double,Float求和精度问题

changingshow 2014-08-14 09:58:14
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?
...全文
332 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
changinglife 2014-09-11
  • 打赏
  • 举报
回复
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();
				}
供参考
浮云若水 2014-08-15
  • 打赏
  • 举报
回复
后面是浮点数 是float的,不可修改,可折中
S117 2014-08-14
  • 打赏
  • 举报
回复
这个很正常呀,Double,Float是浮点数,浮点数本来就是不精确的,如果你想深究的话,去研究IEEE754标准吧! DecimalFormat起作用了吧,不是给你保留两位小数了吗?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧