excel字段的值越来越3.0E9,我需要3000000000时,试图parsing
我有一个Excel上传,其中有一个列的材料id.That列包含字母数字值,但是当我试图上传这个文件的值在jsp页面上传的列正在采取一个意想不到的E,也采取了这个数字的小数我是使用Apache POI来parsingexcel。到目前为止,我已经完成了
while(rowIterator.hasNext()) { boolean isValidentry=true; System.out.println("Row number =" + (i+1)); Row row = rowIterator.next(); CategoryObject categoryObject = new CategoryObject(); categoryObject.setCode(""); if(row.getCell(0)!=null && !"".equals(row.getCell(0).toString().trim())){ //Part Number System.out.println("Get Cell 0 >>>>" +row.getCell(0).toString()); categoryObject.setCode(row.getCell(0).toString().trim());
问题是我得到3.0E9
,我需要30 3000000000
。
categoryObject.setCode作为String字段。该列负责材料ID。
Excel中的数字(除less数边缘情况外)以浮点数forms存储。 Java中的大浮点数字格式化为string时,以科学记数法打印
假设你真正想要的是“给我一个看起来像Excel显示这个单元格的string”,那么不要调用cell.toString()。 这在大多数情况下不会给你想要的
相反,您需要使用DataFormatter类 , 该类提供读取应用于单元格的Excel格式规则的方法,然后在Java中重新创build(尽可能地)
你的代码应该是:
DataFormatter fmt = new DataFormatter(); for (Row row : sheet) { int rowNumber = row.getRowNum() + 1; System.out.println("Row number =" + rowNumber); CategoryObject categoryObject = new CategoryObject(); categoryObject.setCode(""); Cell cell = row.getcell(0, Row.RETURN_BLANK_AS_NULL); if(cell!=null) { String cellValue = fmt.formatCellValue(cell); if (! cellValue.trim().isEmpty()) { System.out.println("Get Cell 0 >>>>" + cellValue); categoryObject.setCode(cellValue); } } }
你可能会注意到我也修复了一堆其他的东西….!
使用BigDecimal
来防止编号的E符号
BigDecimal bDec = new BigDecimal("3.0E9"); System.out.println(bDec.toPlainString());
输出:
3000000000
运行的例子