Apache POI Java 6 到 8 差异

Apache POI Java 6 to 8 Difference

我在 apache poi 3.12 和 Java 1.6 中使用 HSSFWorkbook 将 .xls 文件转换为制表符分隔的文本文件。在我的 processRecord 方法中,我在 NumberRecord、numrec 上使用 FormatTrackingHSSFListener 从数字字段中获取值,代码如下:

String value = formatListener.getFormatString(numrec);

这需要一个值,例如 21.9,并将其四舍五入到最接近的整数。我的问题是,当我更改为 运行 Java 1.8 的新服务器时,该值被截断而不是四舍五入,因此 21.9 变成 21 而不是 22。我已经浏览了 apache 的 poi 文档和他们没有提到行为的改变,所以我要求回答以下问题:

我已经尝试过另一种从 xls 文件中获取值的方法:

String value = new DataFormatter().formatCellValue(cell);

但我得到了同样的行为。

我没有 java 8 ,但是 java 7 和以下 apache poi 库我没有问题(我认为问题是它的 apache poi 版本)。

public static void main(String[] args) {

    try {
        FileInputStream is = new FileInputStream(new File("C:\ook.xls"));
        HSSFWorkbook wb = new HSSFWorkbook(is);
        HSSFSheet sheet = wb.getSheet("Sheet1");

        Row row =  sheet.getRow(0);
        Cell cell = row.getCell(0);

        System.out.println(cell.getNumericCellValue());//returns a double value so its ok

    } catch (IOException e) {
        e.printStackTrace();
    }
    finally{

    }
}

Apache poi 库:

结果:

Excel 文件: