Java 如何检索与Excel中显示的结果相同的单元格值?

Java 如何检索与Excel中显示的结果相同的单元格值?,java,excel,apache-poi,rounding,Java,Excel,Apache Poi,Rounding,我有以下代码: Workbook workbook = WorkbookFactory.create( file ); Sheet sheet = workbook.getSheet( "Sheet1" ); FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); DataFormatter formatter = new DataFormatter( true ); int row

我有以下代码:

Workbook workbook = WorkbookFactory.create( file );
Sheet sheet = workbook.getSheet( "Sheet1" );
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
DataFormatter formatter = new DataFormatter( true );

int rowNum = 0;
int colNum = 0;
Row row = sheet.getRow( rowNum );
Cell cell = row.getCell( colNum );

double rawCellValue = cell.getNumericCellValue();
System.out.println( "raw value: " + rawCellValue );

String cellValue = formatter.formatCellValue( cell, evaluator );
System.out.println( "formatted: " + cellValue );
double number = 1713.6;
System.out.println( "double   : " + number );

DecimalFormat format = new DecimalFormat("#0");

format.setRoundingMode( RoundingMode.HALF_DOWN );
System.out.println( "HALF_DOWN: " + format.format( number ) );

format.setRoundingMode( RoundingMode.HALF_UP );
System.out.println( "HALF_UP  : " + format.format( number ) );
这将产生以下输出:

raw value: 1713.6
formatted: $1,713
在Excel Professional 2010中打开该文件时,该值显示为$1714

你知道为什么POI产生的值与Excel不同吗?是否有办法配置POI,使其返回相同的值(即遵循与Excel相同的舍入算法)

我将POI 3.12与xls(Excel 97-2013)文件一起使用

编辑:此单元格的java格式为
$,##0
(POI内部)。以下是Excel显示的内容:

编辑2:也许这是Java的问题,而不是POI的问题。以下代码:

Workbook workbook = WorkbookFactory.create( file );
Sheet sheet = workbook.getSheet( "Sheet1" );
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
DataFormatter formatter = new DataFormatter( true );

int rowNum = 0;
int colNum = 0;
Row row = sheet.getRow( rowNum );
Cell cell = row.getCell( colNum );

double rawCellValue = cell.getNumericCellValue();
System.out.println( "raw value: " + rawCellValue );

String cellValue = formatter.formatCellValue( cell, evaluator );
System.out.println( "formatted: " + cellValue );
double number = 1713.6;
System.out.println( "double   : " + number );

DecimalFormat format = new DecimalFormat("#0");

format.setRoundingMode( RoundingMode.HALF_DOWN );
System.out.println( "HALF_DOWN: " + format.format( number ) );

format.setRoundingMode( RoundingMode.HALF_UP );
System.out.println( "HALF_UP  : " + format.format( number ) );
生成结果:

double   : 1713.6
HALF_DOWN: 1714
HALF_UP  : 1713

为什么一半向下四舍五入,一半向上四舍五入。看起来这个问题与java 8的某个版本中的错误有关。8u40()解决了这一问题。

相关:格式不应该是问题所在。它是Excel和POI中的默认货币格式。我试过了,但无法复制
formatter.formatCellValue(cell,evaluator)
对于我来说是
$1714
如果
cell.getNumericCellValue()
1713.6
A1
中的Excel单元格内容是什么?公式?哪个?没有公式。作为单独的后续操作,上次编辑中的值正好是1713.6