FormulaEvaluator # AssessmentInCell, использовал ROUND (1234.00,2) что-то странное произошло - PullRequest
0 голосов
/ 14 июля 2020

Когда я использую FormulaEvaluator # AssessmentInCell в своем проекте, я получил целое число, и два десятичных разряда не работали.

apache -poi version

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.1.2</version>
</dependency>

код

public static void main(String[] args) {
    doEvaluate("ROUND(3803.00,2)");
}
public static String doEvaluate(String formula){
    String result = null;
    Workbook wb = new HSSFWorkbook();
    Sheet sheet = wb.createSheet();
    Row row = null;
    Cell cell = null;
    row = sheet.createRow(0);
    cell = row.createCell(0);
    cell.setCellFormula(formula);
    FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
    cell = evaluator.evaluateInCell(cell);
    if (cell != null) {
        switch (cell.getCellType()) {
            case BOOLEAN:
                result = String.valueOf(cell.getBooleanCellValue());
                break;
            case NUMERIC:
                result =  String.valueOf(cell.getNumericCellValue());
                break;
            case STRING:
                result = cell.getStringCellValue();
                break;
            case BLANK:
                break;
            case ERROR:
                cell.getErrorCellValue();
                break;
            // CELL_TYPE_FORMULA will never occur
            case FORMULA:
                break;
        }
        wb.removeSheetAt(0);
    }
    return result;

}   

Ожидаемый результат

3803.00

Фактические результаты

3803,0

Вот мой сравнительный эксперимент

  1. Используйте Microsoft Excel

ROUND(3803,2)

3803

ROUND(3803.0,2)

3803

ROUND(3803.000,2)

3803

Используйте Apache -POI

ROUND(3803,2)

3803

ROUND(3803.0,2)

3803,0

ROUND(3803.000,2)

3803,0

...