apache.poi HSSFCell getNumericCellValue 读取错误

apache.poi HSSFCell getNumericCellValue incorrect read

我使用 apache.poi 从 excel 读取数值。

hssfCell.getNumericCellValue()

但这里是结果错误的 excel 文件示例。

Example of excel file

单元格 N14 的正确结果是 11,115(或 excel 格式的 11,12)。但是 hssfCell.getNumericCellValue() 得到结果 11.114999999999998.

它是公式单元格,所以我可以使用 dateFormatter,结果是 11,11。

HSSFWorkbook wb = new HSSFWorkbook(new ByteArrayInputStream(importFile));
FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator(wb);
DataFormatter dataFormatter = new DataFormatter();
formulaEvaluator.evaluate(hssfCell);
dataFormatter.formatCellValue(hssfCell, formulaEvaluator);

Excel 显示 11,12。我怎样才能得到这个值?

你可以使用这个:

DecimalFormat decimalFormat = new DecimalFormat("#.##");
decimalFormat.setRoundingMode(RoundingMode.CEILING);      
decimalFormat.format(hssfCell.getNumericCellValue());

问题是精度是硬编码的。如果您只使用 2 位小数,则此解决方案可以正常工作。