POI Excel 가져오기 String 읽기 디지털 유형 정밀도 분실 문제 해결

2158 단어 백엔드POIExcel

비즈니스 포인트:


주문서를 대량으로 가져오는데 주문서에 가격이 포함되어 있습니다. 4.5, 6.7 형식입니다.

질문:


poi에서 문자열 형식에 따라 데이터를 꺼내서 구체적인 실체 클래스로 비추어야 합니다.
셀에 있습니다.setCellType(Cell.CELL_TYPE_STRING) 문자열로 읽는 동안 정밀도 이상이 발생하도록 설정됨
예:8.2를 꺼내면 8.1999993이고 7.2는 정상이다
 

접시를 받는 다른 사람의 프로젝트이기 때문에 먼저 원본 코드를 붙여라.

    private static String getCellStringValue(Cell cell) {
        if (cell == null) {
            return "";
        } else {
            cell.setCellType(1);
            return cell.getStringCellValue().trim();
        }
    }

사후 포장 방법은 이 문제를 해결하고 과학 계수법으로 읽는 문제를 해결하는 데 사용됩니다.

    private static String getCellStringValue(Cell cell) {
        if (cell == null) {
            return "";
        } else {
            if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
                return getRealStringValueOfDouble(cell.getNumericCellValue());
            }
            cell.setCellType(1);
            return cell.getStringCellValue().trim();
        }
    }

 
    private static String getRealStringValueOfDouble(Double d) {
        String doubleStr = d.toString();
        boolean b = doubleStr.contains("E");
        int indexOfPoint = doubleStr.indexOf('.');
        if (b) {
            int indexOfE = doubleStr.indexOf('E');
            BigInteger xs = new BigInteger(doubleStr.substring(indexOfPoint
                    + BigInteger.ONE.intValue(), indexOfE));
            int pow = Integer.valueOf(doubleStr.substring(indexOfE
                    + BigInteger.ONE.intValue()));
            int xsLen = xs.toByteArray().length;
            int scale = xsLen - pow > 0 ? xsLen - pow : 0;
            doubleStr = String.format("%." + scale + "f", d);
        } else {
            java.util.regex.Pattern p = Pattern.compile(".0$");
            java.util.regex.Matcher m = p.matcher(doubleStr);
            if (m.find()) {
                doubleStr = doubleStr.replace(".0", "");
            }
        }
        return doubleStr;
    }

필요한 친구에게 도움이 됐으면 좋겠어요!


좋은 웹페이지 즐겨찾기