excel读取为科学计数法【踩坑】

项目场景:

服了呀,日踩一坑,之前做过一个批量导入数据的功能,测试测得时候发现结果文件显示有多条数据不存在(在导入之前会根据三条信息,查询基础库里面是否存在),我用条件一单独查了一下基础库,竟然能查出来。我勒个去了,又把程序看了一遍想了一遍,感觉根本不可能呀。把生产上基础库里的数据导到了我的本地开发库里,然后拿到开发环境侧了一下,导第一遍,还真是导入失败了,看了一下结果文件显示库里没有这条信息(刚刚导入的)。

问题描述

1.打了个断点,发现从excel里面读出来的文本是科学计数法,这就很坑了明明excel里面看上去也不是科学计数法,而且这个问题之前写的时候就遇到了,我记得很清楚,明明我已经解决了,当时是直接把那一列单元格格式设置成了文本,当时我自己也测了一下,完全没问题。
在这里插入图片描述

原因分析:

读出来的数据是科学计数法,查的时候也是用的科学计数法

解决方案:

想了两个解决方案

方案一:从excel直接把格式控制死,就把单元格设置成文本,不可改,但是捣鼓了差不多一天就是不行,而且一列有的行读出来的是科学计数法,有的行读出来的就是字符串,看了一下excel单元格格式都是文本,而且只有8位的时候读出来才是科学计数法,多了或少了读出来都是字符串,凌乱了。根本不会搞。

方案二:直接读出来数据之后,如果是科学技术法把科学计数法转化成字符串呗。其实搞了一会我就想这么搞来着的,我看同事是直接把读到的转化为Long型的,就和同事商量了一下,他提了一下这样搞会导致数据缺失吧,半信半疑我就没有试,想着继续用方案一。搞了一天没解决最后问了一下别的同事,他建议我这么搞,他说不会缺失,最后没办法管他缺不缺失,先把问题解决再说。就试了一下,十分钟就解决了。(吐槽一下自己)

  if(isNotEmpty(ccc001) && isScientificNotation(ccc001)){
            // 使用 BigDecimal 将科学计数法转换为字符串
            BigDecimal  bd = new BigDecimal(ccc001);
            ccc001 = bd.toString();
        }
 // 判断是否是科学计数法
    private static boolean isScientificNotation(String input) {
        return input.matches("[+-]?\\d+(\\.\\d+)?[eE][+-]?\\d+");
    }

今天又是什么都没干的一天,晚上加班写文档。一天踩一个坑,把我埋了算了。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脆皮瞎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值