poi 处理 excel 小数问题 整数多.0 的情况

读取的单元格为 hssfCell,默认 poi 返回的为 double 类型的值,所有先转为 BigDecimal 判断下,再进行返回;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;

/**
 * 获取一个Cell的value,根据cell的不同type,获取不同类型的value,返回String格式
 *
 * @param hssfCell 欲获取value的单元格对象
 * @return 单元格value的String格式
 */
private  String getValue(Cell cell) {
    if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
        // 返回布尔类型的值
        return String.valueOf(cell.getBooleanCellValue());
    } else if (cell.getCellTypeEnum() == CellType.NUMERIC) {
        double doubleVal = cell.getNumericCellValue();
//            return new BigDecimal(Double.toString(doubleVal)).toPlainString();

        // 返回数值类型的值

        //方法一
        Object inputValue = null;// 单元格值
//            String strVal = Double.toString(doubleVal);
//            String[] vals = strVal.split("\\.");
//            if ("".equals(vals[1].replaceAll("0","").trim())){
//                //判断是否含有小数位.0
//                inputValue = Integer.parseInt(vals[0]);
//            }else {
//                inputValue = doubleVal;
//            }
        //方法二
        BigDecimal bdVal = new BigDecimal(doubleVal);
        if ((bdVal + ".0").equals(Double.toString(doubleVal))){
            //判断是否含有小数位.0
            inputValue = bdVal;
        }else{
            inputValue = doubleVal;
        }
        return String.valueOf(inputValue);      //返回String类型
    } else if (cell.getCellTypeEnum() == CellType.STRING){
        // 返回字符串类型的值
        return String.valueOf(cell.getStringCellValue());
    } else {
        // 返回字符串类型的值
        return String.valueOf(cell.getStringCellValue());
    }
}

关于 BigDecimal 的 3 个 toString 方法有何区别,如何选择?

BigDecimal 类有 3 个 toString 方法,分别是 toEngineeringString、toPlainString 和 toString,

从 BigDecimal 的注释中可以看到这 3 个方法的区别:

  • toEngineeringString:有必要时使用工程计数法。工程记数法是一种工程计算中经常使用的记录数字的方法,与科学技术法类似,但要求10的幂必须是3的倍数
  • toPlainString:不使用任何指数
  • toString:有必要时使用科学计数法
不使用指数科学记数法工程记数法
27002.7 × 10³2.7 × 10³
270002.7 × 10⁴27 × 10³
2700002.7 × 10⁵270 × 10³
27000002.7 × 10⁶2.7 × 10⁶

代码实例:

public static void toStringComp(){
    BigDecimal bdVal = new BigDecimal("1E11");
    System.out.println(bdVal.toString());
    System.out.println(bdVal.toPlainString());
    System.out.println(bdVal.toEngineeringString());
}

//结果如下
1E+11
100000000000
100E+9
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值