java问题收集

本文探讨了Java中double类型的科学计数法及计算精度问题,并提出了使用BigDecimal作为解决方案;同时,还讨论了在迭代过程中删除元素导致的并发修改异常,并提供了可行的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.double类型

在操作double类型时,如果double大于10位,则double会自动使用科学计数法进行操作。

在进行double计算时,会出现很多位小数点。这是由于2进制和16进制转换的时候的偏度差造成的。

针对以上问题,推荐使用java.math.BigDecimal。

BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();

在实体类中更推荐使用java.math.BigDecimal映射到数据库有小数的类型字段。

 

2.在对一个集合进行迭代遍历并删除一些符合条件的键值对的时候,容易出现java.util.ConcurrentModificationException 这个异常

while(parameterValues.size() != 0) {
    Set<Object> pv = new HashSet<Object>();
    Iterator<Object> it = parameterValues.iterator();
    while(it.hasNext()) {
        Object parameter = it.next();
        it.remove();                //方法1
        doEvent(parameter);	
        pv.add(parameter);
        parameterValues.remove(parameter);//方法2
}
parameterValues.removeAll(pv);//方法3

 

推荐使用方法1,3,但多线程下仍会出现此问题.待解决

方法2不推荐使用 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值