POI Excel 가져오기 String 읽기 디지털 유형 정밀도 분실 문제 해결
비즈니스 포인트:
주문서를 대량으로 가져오는데 주문서에 가격이 포함되어 있습니다. 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;
}
필요한 친구에게 도움이 됐으면 좋겠어요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Web Developer Roadmap 2018이 나왔으므로 2017년판과 비교해 본다얼마 전 Web Developer Roadmap이 2018년 버전으로 업데이트되었습니다. 간단하게 말하면 Web에 종사하고 있는 사람이 무엇인가를 공부&구현할 때에 헤매면 보라! 초야바/나우이/MK5의 3단계로 세상...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.