我正在阅读Excel文件并将其保存到数据库。
我正在迭代每一行和单元格并将其保存到矢量对象,然后使用循环将其保存到数据库。当我保存数据库时,我这样做:
id = ((XSSFCell) cellStoreVector.get(0)).toString()==null?"":((XSSFCell) cellStoreVector.get(0)).toString();
每列都。其他一切都很好,除了这个我得到2.01356229E8作为id。我不知道为什么我在我的id中得到2.01356229E8 ..应该是这样的201356229。
谢谢。
答案 0 :(得分:1)
这不是Excel显示问题,因为该值已经使用Apache POI提取到Java中。但是当调用XSSFCell#toString()
时,Apache POI代码使用以下表达式将类型为CELL_TYPE_NUMERIC
的单元格转换为toString()
中的字符串:
return getNumericCellValue() + "";
XSSFCell#getNumericCellValue()
方法返回double
,当转换为字符串时,会生成字符串"2.01356229E8"
。这是从double
到String
的预期Java转换,因为"2.01356229E8"
是201356229
的科学记数法表示。 (在数学中,表示201356229
和2.01356229E8
是等效的。)
如果您要保存到的Oracle数据库中的列是VARCHAR2
,那么在将其保存到数据库之前,您需要格式化String值。这会将"201356229"
存储在id
:
DecimalFormat df = new DecimalFormat("#");
id = df.format( ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue() );
如果列是NUMBER
,那么首先不要将它转换为字符串,只需使用数字单元格值作为double
传递给数据库。
double numericId = ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue();
答案 1 :(得分:0)
这听起来像Excel显示问题。 Excel不知道您希望它是一个整数。
您可能希望将其扩大(选择整列,右键单击,列宽...并输入10)。
您也可以选择列,右键单击,格式化单元格...,选择数字,将小数位数更改为0。