关于Double数值相加的问题

Lyle 2014-05-16 10:06:06
代码如下:


//计算总金额
it = null;
Double countfree=0.0;
it = list2.iterator();
while (it.hasNext()) {
Object[] obj = (Object[]) it.next();
obj[31] = obj[31]==null ? 0.0 : obj[31];
countfree += Double.valueOf(obj[31].toString());
}
DecimalFormat df = new DecimalFormat("0.00");
String num = df.format(countfree);

将list2中一个数值字段进行累加,有个别会出现 1.083306722E7 这样的值,为什么会这样? 怎么处理?
如果有更好的累加方法也望分享下
...全文
1888 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lyle 2014-05-20
  • 打赏
  • 举报
回复

	public static BigDecimal add(String s1,String s2){
		BigDecimal d1 = new BigDecimal(s1);
		BigDecimal d2 = new BigDecimal(s2);
		return d1.add(d2);
	}
snailjumpjump 2014-05-16
  • 打赏
  • 举报
回复
用BigDecimal,可以保证精度
vnvlyp 2014-05-16
  • 打赏
  • 举报
回复
引用 6 楼 xf_luyao 的回复:
[quote=引用 3 楼 vnvlyp 的回复:] 处理金额?怎么能用double,而且有必要用double吗。。直接int不行吗?
有小数位[/quote] 用最小币额作单位啊,比如分,int如果范围太小就用long
kiyoki 2014-05-16
  • 打赏
  • 举报
回复
计费系统不都是分做单位的嘛,用元做单位当然有小数了
S117 2014-05-16
  • 打赏
  • 举报
回复
引用 5 楼 xf_luyao 的回复:
[quote=引用 2 楼 longtian1213 的回复:] double是浮点数,不精确的,不能用于精确运算,特别是和钱相关的,千万别用double!
的确,那用什么好呢[/quote] 通常用long比较好,就是你想保留两位小数,可以先乘100,都换成long的整数再运算!
Lyle 2014-05-16
  • 打赏
  • 举报
回复
引用 3 楼 vnvlyp 的回复:
处理金额?怎么能用double,而且有必要用double吗。。直接int不行吗?
有小数位
Lyle 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 longtian1213 的回复:
double是浮点数,不精确的,不能用于精确运算,特别是和钱相关的,千万别用double!
的确,那用什么好呢
Lyle 2014-05-16
  • 打赏
  • 举报
回复
引用 1 楼 suciver 的回复:
不要用double进行计算用BigDecimal的add来进行+法运算
更改:

                             //计算总金额 
				it = null;;
				countfree=0.0;
				it = list2.iterator();
				while (it.hasNext()) {
					Object[] obj = (Object[]) it.next();
					obj[31] = obj[31]==null ? 0 : obj[31];
					countfree = Util.add(Double.parseDouble(obj[31].toString()), countfree);
					//countfree += Double.parseDouble(obj[31].toString());
				}
				DecimalFormat df = new DecimalFormat("0.00");
				String num = df.format(countfree);

	public static double add(double v1, double v2) {
		  BigDecimal b1 = new BigDecimal(Double.toString(v1));
		  BigDecimal b2 = new BigDecimal(Double.toString(v2));
		  return b1.add(b2).doubleValue();
		 }
通过Bigdecimal累加后还是不行
vnvlyp 2014-05-16
  • 打赏
  • 举报
回复
处理金额?怎么能用double,而且有必要用double吗。。直接int不行吗?
S117 2014-05-16
  • 打赏
  • 举报
回复
double是浮点数,不精确的,不能用于精确运算,特别是和钱相关的,千万别用double!
suciver 2014-05-16
  • 打赏
  • 举报
回复
不要用double进行计算用BigDecimal的add来进行+法运算

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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