格式问题,同时读取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()
。