POI读入Excel用String读取数值类型失真问题(精度丢失)
问题:POI读取Excel数值单元格时,读取的小数数值与真实值不一致
话不多说,直接上代码!
public static String getRealStringValue(Cell cell) {
   String cellValue = "";
   if (cell == null) {
      return cellValue;
   }else {
      final CellType cellType = cell.getCellType();
      if (CellType.NUMERIC.equals(cellType)) {
         cellValue = DoubleUtils.realStringValueOfDouble(cell.getNumericCellValue());
      } else {
         cell.setCellType(CellType.STRING);
         cellValue = cell.getStringCellValue();
      }
      return cellValue;
   }
}
public class DoubleUtils {
    private DoubleUtils() {
    }
    public static String realStringValueOfDouble(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.parseInt(doubleStr.substring(indexOfE + BigInteger.ONE.intValue()));
            int xsLen = xs.toByteArray().length;
            int scale = xsLen - pow > 0 ? xsLen - pow : 0;
            final String format = "%." + scale + "f";
            doubleStr = String.format(format, 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;
    }
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号