poi读取excel小数

ylovep 2012-08-30 09:18:35
{cCode=18-245, cBetweenUnitsFlag=0 , cBetweenUnits=, cOrgnID=22, dVouDate=2011-08-03, iMonth=07, cAcctName=其他业务支出_中转, iYear=2011, cAcctGUID=0640200, iDebitQTY=0, iCreditAMT2=, cDeptName=缺省, cVouTypeGUID=Manual, iCreditAMT1=0, iCreditQTY=0, cSummary=本月南传领料, cCreatorGUID=CWWENY, iDebitAMT1=28133.42, iDebitAMT2=28133.42}
这是一行数据 存放在一个map中

在保存到数据库之前获取该map中iDebitAMT1值 也在后台输出:金额:28133.42

最后保存数据库的时候出现

insert into Co_Relationdetails1 (cOrgnID,cVouTypeGUID,cCode,dVouDate,iYear,iMonth,cCreatorGUID,cAcctGUID,cAcctName,cSummary,iDebitAMT1,iCreditAMT1,iDebitAMT2,iCreditAMT2,iDebitQTY,iCreditQTY,cDeptName,cBetweenUnitsFlag) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
{22,Manual,18-245,2011-08-03 00:00:00.0,2011,07,CWWENY,0640200,其他业务支出_中转,本月南传领料,0E+127,0,0E+127,0,0,0,缺省,0 }
红色部分为什么是这样的情况?求解
...全文
807 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylovep 2012-09-09
  • 打赏
  • 举报
回复
该问题以及解决

原因:数据库字段设置问题 将numer类型该成果 nunmer(21,9)
brightyq 2012-08-31
  • 打赏
  • 举报
回复
可以转成字符串往数据库里插入。
wscxy2012 2012-08-31
  • 打赏
  • 举报
回复
int type = cell.getCellType();
switch (type) {
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)){

System.out.println(cell.getDateCellValue());
}else{
double a = cell.getNumericCellValue();
String b = "";
if(String.valueOf(a).toUpperCase().indexOf('E') > -1 ){
b = String.valueOf(new DecimalFormat("#.######").format(a));
}
System.out.println(b);
}
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case Cell.CELL_TYPE_BLANK:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
System.out.println(cell.getStringCellValue());
break;
default:
System.out.println(cell.getStringCellValue());
break;
}


参考一下,可以去E,保留小数
acertang 2012-08-31
  • 打赏
  • 举报
回复
都取出来了 iDebitAMT1值 也在后台输出:金额:28133.42,说明取法没错,但你存的时候是科学记数的数字,不应该啊。要不你先转成字符串再转数值往数据库插试试。
scbb 2012-08-30
  • 打赏
  • 举报
回复
POI读的时候要按类型调用不同的函数的。
我用下面的代码读取excel中不同类型的数据

switch(cellType)
{
case HSSFCell.CELL_TYPE_NUMERIC:
调用getNumericCellValue();break;
case HSSFCell.CELL_TYPE_STRING:
调用getStringCellValue();break;

web中使用POI导入导出EXCEL文件的例子 struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.*; import org.apache.struts.action.*; import org.apache.struts.upload.FormFile; import org.apache.commons.beanutils.BeanUtils; public class Action { /**//* * 把数据库中的字段导入到Excel ,并生成Excel文档 **/ public ActionForward getDownload(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { Form fm = (Form) actionForm; // Excel 文件存放在服务器的相对路径下 String outputFile = request.getRealPath("/tmp/Excel.xls"); try { // 创建新的Excel 工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel 工作簿中建一工作表 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 设置单元格格式(文本) HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@")); // 在索引0的位置创建行(第一行) HSSFRow row = sheet.createRow((short) 0); HSSFCell cell1 = row.createCell((short) 0);// 第一列 HSSFCell cell2 = row.createCell((short) 1); HSSFCell cell3 = row.createCell((short) 2); // 定义单元格为字符串类型 cell1.setCellType(HSSFCell.CELL_TYPE_STRING); cell2.setCellType(HSSFCell.CELL_TYPE_STRING); cell3.setCellType(HSSFCell.CELL_TYPE_STRING); cell1.setEncoding(HSSFCell.ENCODING_UTF_16); cell2.setEncoding(HSSFCell.ENCODING_UTF_16); cell3.setEncoding(HSSFCell.ENCODING_UTF_16); // 在单元格中输入数据 cell1.setCellValue("姓名"); cell2.setCellValue("性别"); cell3.setCellValue("年龄"); Connection connection = session.connection(); String sql = "Select t.name, t.sex, t.age from table t where t.sex = ?"; try { PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, fm.getSex());// 传入查询条件 ResultSet rs = ps.executeQuery();// 查询结果存入rs connection.commit();// 执行SQL while (rs.next()) { //设置j行从第二行开始 int j = 1; row = sheet.createRow((short) j); //设置i列从第二列开始 for (int i = 1; i <= 3; i++) { HSSFCell cell = row.createCell((short) (i-1)); // 设置单元格格式 cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(rs.getString(i)); } j++; } request.setAttribute("message", "文件生成成功!"); } catch (SQLException e) { request.setAttribute("message", "创建文件失败!"); e.printStackTrace(); } // 删除路径下同名的Excel 文件 File path = new File(outputFile); path.delete(); // 新建一输出文件流 FileOutputStream fOut = new FileOutputStream(outputFile); // 把相应的Excel 工作簿存盘 workbook.write(fOut); // 操作结束,关闭文件 fOut.flush(); fOut.close(); //该处如果Excel过大会影响效率,谁有好的想法可以提出来参考(不过从页面下载完后就会清空) request.getSession().setAttribute("Download", outputFile); } catch (Exception ioexception) { request.setAttribute("message", "创建文件失败!"); return actionMapping.findForward("outJSP"); } return actionMapping.findForward("outJSP"); }

67,549

社区成员

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

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