我們在用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); // 自定義的讀取其它格式數據的函數 } }
更多方式歡迎評論區補充~~