JAVA POI 读取带百分号的数值保留原格式

253 阅读1分钟

使用 POI 3.15 读取 Excel 数据, 如果单元格的值是带百分号的数值, 获取到的值默认是被转换后的小数, 例如"55.6%"会被转换为"0.556", "0.1298%"被转换为"0.001298"

如果想保留原格式的话, 需要获取单元格的格式, 对带有百分号的做处理, 同时要注意浮点数精度问题, 下面是参考代码

// 获取格式判断
if(cell.getCellStyle().getDataFormatString().indexOf("%") > -1) {
    double num = cell.getNumericCellValue();
    String str = String.valueOf(num); 
    int dg = str.length() - str.indexOf(".") - 1 - 2;
    num = num * 100;
    BigDecimal numberBigDecimal = new BigDecimal(num);
    numberBigDecimal  = dg > -1 ? numberBigDecimal .setScale(dg, BigDecimal.ROUND_HALF_UP) : numberBigDecimal;
    cellVal = numberBigDecimal + "%";
} else {
    cell.setCellType(CellType.NUMERIC);
    BigDecimal bd = new BigDecimal(Double.toString(cell.getNumericCellValue()));
    cellVal = bd.toPlainString().replaceAll("\\.0+$", "");  
}