POI DataFormatter 默认向下舍入 5 而不是向上舍入

时间:2021-07-19 01:21:02

标签: java excel apache-poi

在 Apache POI 中,我正在尝试读取单元格(原始)值为:0.575 的 Excel 电子表格

据我所知,DataFormatter.formatCellValue() 方法的目的是按照 Excel 文档中显示的方式返回单元格的值。

Excel 中的单元格格式为自定义:"£"#,##0.00;[Red]-"£"#,##0.00

它在 Excel 中的显示方式是:£0.58

当我使用时:

DataFormatter formatter = new DataFormatter();
String displayValue = formatter.formatCellValue(cell);

我得到:0.57 英镑

为什么 POI 的格式化程序会在 Excel 对值进行四舍五入时对值进行四舍五入?

我试过了:

if( type == CellType.NUMERIC ) {
    Format format = formatter.getDefaultFormat(cell);
    if( format instanceof DecimalFormat ) {
        DataFormatter.setExcelStyleRoundingMode((DecimalFormat)format);
    }
}

但是没有设置舍入模式,因为 formatExcelGeneralNumberFormatformat 的成员之一是 DecimalFormat(正如我从调试器中看到的那样),但我似乎没有 API 访问权限。

我相信这是相关的:当我检查单元格的 XML 值时,我看到:

<xml-fragment r="D1" s="2">
  <main:v>0.57499999999999996</main:v>
</xml-fragment>

这当然与我在 Excel 中看到的“原始”值 (0.575) 不同。 如果 POI 框架是四舍五入 0.57499999999999996 而不是 0.575 那么这当然解释了为什么它是四舍五入而不是向上。 重现 Excel 行为的唯一方法是将原始值四舍五入到 3dp (0.575) - 然后 再次 到 2dp (0.58)

0 个答案:

没有答案