2016-08-18 52 views
1

我想从双转换为字符串。它正在工作,但它正在删除所有前导零。例如,00010000正在更改为10000,而01更改为1.我正在尝试读取xls文件,这证明很困难。从双转换为字符串,但保持前导零

运行程序时数字的数量是未知的,所以我想不出一种方法来解决这个问题。谁能帮忙?

下面是我的代码:

while (cells.hasNext()) { 
      cell = (HSSFCell) cells.next(); 
      if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { 
      lineList.add(cell.getStringCellValue()); 
      } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { 
      String s = String.valueOf(cell.getNumericCellValue()); 
      lineList.add(s); 
      } 
     } 
+0

这是一个双“号码? 00010000? –

+2

在'double'(或Java中的任何其他数字类型)中没有这样的概念。 –

+1

当您转换为Java中的字符串时,您可以使用'String.format'设置宽度和精度以及用于填充的前导零。 – jgitter

回答

0

我的猜测,这里发生了什么是你必须被格式化为00010000在Excel中的数字数据。但是,在Excel内部,这些数据可能仅存储为1000010000.0等,并且由于格式的原因,前导零才会出现。当您使用HSSF将此数字数据导入到Java中时,它也以1000010000.0等形式出现。如其他人已经提到的,Java double基本类型中没有“前导”零。所以当你转换为String时,当然不会有前导零,因为它们根本不存在。

可能的解决方法:

如果格式化您的Excel数值列文本,然后再导入,那么下面if条件应该解雇这些值:

if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { 
    lineList.add(cell.getStringCellValue()); 
} 

然后,您可以简单地直接读入文本值,引导零和全部,并保留Excel电子表格中存在的信息。

我还没有测试过这个,但如果我遇到了你的问题,这可能是我会尝试的。