簡體   English   中英

Apache POI Java 6到8的區別

[英]Apache POI Java 6 to 8 Difference

我在Java 1.6的Apache Poi 3.12中使用HSSFWorkbook,將.xls文件轉換為制表符分隔的文本文件。 在我的processRecord方法中,通過以下代碼,使用NumberRecord numrec上的FormatTrackingHSSFListener從數字字段中獲取值:

String value = formatListener.getFormatString(numrec);

它采用一個值,例如21.9,並將其舍入到最接近的整數。 我的問題是,當我更改為運行Java 1.8的新服務器時,該值被截斷而不是四舍五入,因此21.9變為21而不是22。我查看了apache的poi文檔,他們沒有提到行為,因此我要求回答以下問題:

  • 為什么會這樣? (最不重要)
  • 有沒有一種方法可以檢索值,以便在Java 1.8中將其舍入而不是截斷?
  • 有沒有一種方法可以將其原始形式的值取整而不進行舍入或截斷?

我已經嘗試了另一種從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文件:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM