如果用BigDecimal就可以解决这种问题。
代码如下:
-------浮点数,容易出现很大的数字的不精确,我们用BigDecimal来代替 /** * rev * @param event */ public void recTotalCost(ActionEvent event){ this.cleanErrorMsg(); BigDecimal b1 = new BigDecimal(Double.toString(0.0)); //total BigDecimal b2 = new BigDecimal(Double.toString(0.0)); //unitCost BigDecimal b3 = new BigDecimal(Integer.toString(0)); //recQty PoDetail item = null; if(availablePoDetailList!=null&&!availablePoDetailList.isEmpty()){ for (int i = 0; i < availablePoDetailList.size(); i++) { item = availablePoDetailList.get(i); if(item.getActiveFlag()!=null&&item.getActiveFlag().equals("Y")){ b2 = new BigDecimal(Double.toString(item.getUnitCost()!=null?item.getUnitCost():0.0)); if( item.getRecQty()!=null && item.getRecQty()>0){ int recQty = item.getRecQty(); b3 = new BigDecimal(Integer.toString(recQty)); b1 = b1.add(b2.multiply(b3)); } } } this.poItem.setRevTotalCost(b1.doubleValue()); msg.sendInfoMSG(""); }else{ msg.sendErrorMSG("NO data"); } }
新闻热点
疑难解答