java poi在读取excel时,数字自动带“.0”处理方法

最近项目有个需求,就是将excel简析后插入mysql数据库中,因此写了一个测试类和一个controller,测试类负责读取excel和简析excel,然后调用发布的接口,传入对象;controller负责将传入对象插入到数据库中。通过httpClient发送请求,详情见:

https://blog.csdn.net/fz13768884254/article/details/81772187

poi处理过程:

https://blog.csdn.net/fz13768884254/article/details/81534946

异常发生

表数据:

简析过程:

map.put("id", cell_0.getNumericCellValue()+"");

调用接口:

 public static String post(String url, Map<String, Object> mapParam){
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
        String body = null;
        try {
            StringEntity s = new StringEntity(JsonUtils.toJSONString(mapParam), "UTF-8");
            s.setContentEncoding("UTF-8");
            s.setContentType("application/json");
            post.setEntity(s);

            HttpResponse res = client.execute(post);
            System.out.println(res.toString());
            if(res.getStatusLine().getStatusCode() == HttpStatus.OK.value()){
                HttpEntity entity = res.getEntity();

                body = entity != null ? EntityUtils.toString(entity) : null;
                System.out.println(body);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return body;
    }

 调用时一直返回500,检查也没有发现代码问题,后来查看日志发现,controller中接收对象属性hotelId为long类型的,而在poi简析时,数字类型被统一简析为double,即把1->1.0,这样在接口映射时就会报类型转换异常。

异常处理:

方法一:使用NumberFormat 来做格式处理

                double d = cell_0.getNumericCellValue();
                NumberFormat nf = NumberFormat.getInstance();

                String s = nf.format(d);
                if (s.indexOf(",") >= 0) {
//这种方法对于自动加".0"的数字可直接解决
//但如果是科学计数法的数字就转换成了带逗号的,例如:12345678912345的科学计数法是1.23457E+13,经过这个格式化后就变成了字符串“12,345,678,912,345”,这也并不是想要的结果,所以要将逗号去掉
                    s = s.replace(",", "");
                }
                
                map.put("hotelId", s);

方法二:在获取该字段时,将其转换为对应的类型字符串

double d = cell_0.getNumericCellValue();
//将double类型转换为对应的字段类型
map.put("id", Double.valueOf(d).longValue()+"");

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值