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 

运行的例子