gpt4 book ai didi

java - Apache POI DataFormatter 返回科学记数法

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:39 28 4
gpt4 key购买 nike

我有一个 xlsx 文件,我正在使用 java 6 中的 apache poi 3.17 读取它。在一个实例中,我有一个值为 123456789011 的单元格。这被读入 java 作为 NUMERIC CellTypeEnum 单元格。当我像这样使用 DataFormatter 获取单元格的值时:

DataFormatter formatter = new DataFormatter(Locale.US);
String strVal = formatter.formatCellValue(cell);

字符串值为“1.234567+11”。我需要单元格中的实际值是“123456789011”。我怎样才能得到它?

我已经尝试在 Java 中使用 BigDecimal 来转换字符串,但它返回“123456700000”,因为这是它对给定信息所能做的最好的;这意味着我需要从实际的单元格对象中获取正确的值。我也尝试使用 cell.getNumericCellValue() 但它返回一个 double ,它的限制太小而无法处理原始值,因此它被检索为“1.234567E11”,这与其他检索方法有相同的问题。

有没有办法从输入 xlsx 的原始单元格中获取字符串形式的值?我对原始 xlsx 无能为力。

谢谢。

最佳答案

使用 BigDecimal 的 toPlainString() 方法。它采用科学记数法并将其转换为相应的数字字符串值。

我试过这样做:(我在工作表的单元格 A1 中有数字 123456789011,单元格类型为 NUMERIC)

Row row = sheet.getRow(0);
Object o = getCellValue(row.getCell(0));
System.out.println(new BigDecimal(o.toString()).toPlainString());

getCellValue 方法是我读取单元格的通用方法:

public Object getCellValue(Cell cell) {
if (cell != null) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getStringCellValue();

case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue();

case Cell.CELL_TYPE_NUMERIC:
return cell.getNumericCellValue();
}
}
return null;
}

希望这对您有所帮助!

关于java - Apache POI DataFormatter 返回科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46431561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com