easypoi导入excel数据,小数数据出现很多位0,导入时出现很多空数据

问题背景

开发中使用easypoi做数据导入时出现的两个问题,这里做下记录。
1、导入小数时,后端使用BigDecimal接收数据,发现小数位后面自动多了很多位0。
2、导入很多空数据,数据对象不为空,但是对象每个属性值为空。

解决方案

1、对于第一个问题,一直没找到原因所在,应该是excel在填写数据导致。个人解决方案是在导入的实体类中,对应的字段重写set方法

/**
ROUND_UP 远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位
ROUND_DOWN 趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
ROUND_CEILING 向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数, 舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。
ROUND_FLOOR 向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。
ROUND_HALF_UP 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_HALF_DOWN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用: : ROUND_HALF_DOWN如果是偶数,使用ROUND_HALF_UP
ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式
 */
public void setScore(BigDecimal score) {
        this.score= score.setScale(2, BigDecimal.ROUND_DOWN);
}

有的网友说用@NumberFormat(pattern = “#.##”),这里我还没试过
2、对于第二个出现的问题,主要是因为在使用excel删除数据的时候,采用delete删除某行。虽然这样可以删除数据,但是对象还是存在的。正确的删除方式,应该选中excel整体某行,右键删除,当然代码上可以直接进行判断,并排除;

总结

对于导入功能,上线前,最好用真实数据做下测试,避免在上线后,遇到各种各样问题,有些问题并不一定是自生代码问题,很有可能是其他问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值