Когда я использую 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
Вот мой сравнительный эксперимент
- Используйте 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