格式问题,同时读取Excel数据到Java

我正在阅读使用java apache的Excel数据。 在读取869.87929(在Excel中)的双精度值到869.8792899999999(在java中)时,我遇到了格式问题。

我正在使用以下文件来读取Excel数据。
1. Schema.csv:SheetName,2-int-Double

2. File.xls:

col1 | col2 123 | 869.87929

示例代码:

if(type.equals("Double")){ Double fval=Double.parseDouble(content[i-1]); String sval=fval.toString(); listObjects.add(new Double(Double.parseDouble(sval))); } 

注意:从file.xls中的schema.csv&content []值键入

没有必要将string转换为string,因为这不应该有任何用处。

试着做

 listObjects.add(new BigDecimal(content[i-1])); 

四舍五入你可以做

 listObjects.add(new BigDecimal(content[i-1]).setScale(9, RoundingMode.HALF_UP)); 

虽然我怀疑在这之前发生舍入错误,因为这应该和基本相同

 listObjects.add(new Double(content[i-1])); 

四舍五入你可以做

 double d = Double.parseDouble(content[i-1]); double round9 = Math.round(d * 1e9) / 1e9; listObjects.add((Double) round9); 

这些数字与double的精度差不多,在这里不应该有额外的错误(即错误可能在此之前)

双重不利于保持精度。 优先使用BigDecimal。 我相信这是你的问题。

https://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal

如果您使用Apache POI,则可以使用Cell界面中的getCellType()==Cell.CELL_TYPE_NUMERIC比较和getNumericCellValue()