在将Excel数据读入Java时格式化问题

时间:2015-01-20 08:25:29

标签: java excel apache-poi export-to-csv

我正在使用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)));
        }

注意:从schema.csv&中输入。来自file.xls的content []值

3 个答案:

答案 0 :(得分:1)

Double不能保持精度。 Preffered使用BigDecimal。我相信这是你的问题。

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

答案 1 :(得分:1)

没有必要将数字来回转换为字符串,因为这不应该做任何有用的事情。

尝试

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的数字大致相同,此处不应出现其他错误(即错误可能在此之前)

答案 2 :(得分:1)

如果您使用Apache POI - 您可以使用getCellType()==Cell.CELL_TYPE_NUMERIC来自Cell界面的getNumericCellValue()