使用apache poi从excel获取不正确的值

时间:2015-06-09 08:33:47

标签: java apache-poi

在excel中,列的值是10101101010000000000但是当我使用POI在java中读取它时,值会更改为10101101009999999000,任何人都可以告诉我最新情况,以及如何从excel中获取确切的值。 我已经尝试将celltype设置为字符串并使用cell.getStringCellValue()以及此new BigDecimal(cell.getNumericCellValue()).toPlainString(),但我仍然没有获得与excel相同的值

这是我的代码

List<BankClassVo> data = new ArrayList<BankClassVo>();
    FileInputStream fis = new FileInputStream(new File(Constant.VALIDATION_REFERENCE_FILE_PATH + Constant.BANK_CLASSIFICATION_REF_FILE + ".xlsx"));
    XSSFWorkbook myWorkBook = new XSSFWorkbook(fis);
    XSSFSheet mySheet = myWorkBook.getSheetAt(1);
    Iterator<Row> rowIterator = mySheet.iterator();


    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();

        BankClassVo vo = new BankClassVo ();


            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                if (cell.getColumnIndex() == 0) {
                    vo.setsClass(new BigDecimal(cell.getNumericCellValue()).toPlainString());
                }
                else if (cell.getColumnIndex() == 1) {
                    vo.setClassification(cell.getStringCellValue());
                }
            }

        data.add(vo);
    }

    myWorkBook.close();
    return data;

1 个答案:

答案 0 :(得分:1)

使用MathContextRoundingModeRef

BigDecimal value = new BigDecimal(cell.getNumericCellValue(), new MathContext(10 , RoundingMode.CEILING));
System.out.println(value.toPlainString());