我们在用Java使用poi读取Excel时,或许会遇到百分数,然而poi自动将百分数转换为了小数,如果小数是以0开头的还可能被删除了起始的0,变成了.**,虽然数值大小没变,但是直观展示变了,对于不懂开发只关注结果的领导来说难免产生误解,这一误解就是100倍的,所以大多数时候需要我们将百分号%保留,那么下面就记录一种本人总结的方式:
if(cell != null) {
String cellStr = "";
String formatType = cell.getCellStyle().getDataFormatString(); // 如果是百分数,类型结果可能为 0%(保留整数) 或 0.00%(保留2位小数);
if (formatType.indexOf("%") != -1) {// 判断如果含百分号,则认为百分数类型
// System.out.println(cols.get(j) + "数据类型:" + formatType );
int baifenshuxiaoshuwei = 0;
if(formatType.indexOf(".")!=-1) { // 判断包含小数点
baifenshuxiaoshuwei = formatType.substring(formatType.indexOf("."), formatType.indexOf("%")).length()-1; // 获取小数位数
cellStr = "#.";
for(int weishu=0;weishu<baifenshuxiaoshuwei;weishu++) {
cellStr += "0";
}
cellStr = new DecimalFormat(cellStr).format(cell.getNumericCellValue()*100) + "%"; // 保留对应位数百分号
if(cellStr.startsWith(".")) {// 如果以.开头的,前面加0拼接;
cellStr = "0" + cellStr;
}
} else { // 不含小数点,直接四舍五入整数;
cellStr = Math.round(cell.getNumericCellValue()*100)+"%";
}
//System.out.println(cellStr);
}else {// 普通类型
cellStr = ExcelUtil.getCellStringValue(cell); // 自定义的读取其它格式数据的函数
}
}