String类型转BigDecimal类型并相加;从数据库中查询出来的String类型的数值(小数),如何转换为BigDecimal类型的,并算总和

大家好,这是我第一次写博客,也不知道怎么写,就把我这次做项目过程中遇到的问题和经验跟大家分享哈

看代码吧

首先在Dao层中建一个interface,返回值是BigDecimal ,我才开始做的时候返回值是double的,后面算出来结果和小数点位数不正确(原因是:BigDecimal是不可变类,它的数值是固定的,add等操作只会返回一个新的对象,不会修改原来对象的数值。
所以,需要重新接收add后的值。而我直接打印sum始终值初始定义的0.),后面改成BigDecimal返回值,然后写成:sum=sum.add(bd);就可以了:
咋们来一起看看代码吧: 代码片.

// An highlighted block
public interface scllDao {
	public BigDecimal sum(Scll scll);
}

在Dao实现层新建一个类:代码片.

// An highlighted block
public class scllDaoImpl extends BaseDao implements scllDao{
@Override
	public BigDecimal sum(Scll scll) {
		try {
			openConn();
			//这个地方是使用StringBuffer拼接SQL语句,这个知识点比较老,建议别用
			StringBuffer sqlStr= new StringBuffer("select * from scll_01 where 1 = 1");
			if(scll.getFDateBeg()!=null && !"".equals(scll.getFDateBeg())){
				sqlStr.append(" and FDate>='"+scll.getFDateBeg()+"'");
			}
			if(scll.getFDateEnd()!=null && !"".equals(scll.getFDateEnd())){
				sqlStr.append(" and FDate<='"+scll.getFDateEnd()+"'");
			}
			if(scll.getFLLName()!=null && !"".equals(scll.getFLLName())){
				sqlStr.append(" and FLLName='"+scll.getFLLName()+"'");
			}
			if(scll.getFRName()!=null && !"".equals(scll.getFRName())){
				sqlStr.append(" and FRName='"+scll.getFRName()+"'");
			}
			if(scll.getFCKName()!=null && !"".equals(scll.getFCKName())){
				sqlStr.append(" and FCKName='"+scll.getFCKName()+"'");
			}
			if(scll.getFFLName()!=null && !"".equals(scll.getFFLName())){
				sqlStr.append(" and FFLName='"+scll.getFFLName()+"'");
			}
			if(scll.getFItemIDName()!=null && !"".equals(scll.getFItemIDName())){
				sqlStr.append(" and FItemIDName='"+scll.getFItemIDName()+"'");
			}
			if(scll.getFWName()!=null && !"".equals(scll.getFWName())){
				sqlStr.append(" and FWName='"+scll.getFWName()+"'");
			}
			if(scll.getFModel()!=null && !"".equals(scll.getFModel())){
				sqlStr.append(" and FModel='"+scll.getFModel()+"'");
			}
			System.out.println(sqlStr.toString());//打印输出
			pst = conn.prepareStatement(sqlStr.toString());
			rs=pst.executeQuery();
			//new一个BigDecimal 
			BigDecimal sum = new BigDecimal(0.00000);
			while(rs.next()){
				Scll sc1=new Scll();
				sc1.setFDate(rs.getString("FDate"));
				sc1.setFBillNo(rs.getString("FBillNo"));
				sc1.setFLLName(rs.getString("FLLName"));
				sc1.setFRName(rs.getString("FRName"));
				sc1.setFCKName(rs.getString("FCKName"));
				sc1.setFFLName(rs.getString("FFLName"));
				sc1.setFItemIDName(rs.getString("FItemIDName"));
				sc1.setFWName(rs.getString("FWName"));
				sc1.setFModel(rs.getString("FModel"));
				sc1.setFBaseQty(rs.getString("FBaseQty"));
				sc1.setFCUUnitName(rs.getString("FCUUnitName"));
				//使用substring截取我们要保留的位数
				String sumss=sc1.getFBaseQty().substring(0,7);
				BigDecimal bd=new BigDecimal(sumss);
				System.out.println("bd:"+bd);
				sum=sum.add(bd);
				System.out.println("sum:"+sumss);
			}
			System.out.println("总和:"+sum);
			return sum;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			closeAll();
		}
		// TODO Auto-generated method stub
		return null;
	}
}

运行的结果如下,最终的总和就是我要得结果了String类型转BigDecimal类型并相加;从数据库中查询出来的String类型的数值(小数),如何转换为BigDecimal类型的,并算总和_第1张图片

小白白第一次写,有不足的地方还望大家指导,多多包涵

你可能感兴趣的:(String类型转BigDecimal类型并相加;从数据库中查询出来的String类型的数值(小数),如何转换为BigDecimal类型的,并算总和)