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

2023-12-21 20:49:08

项目场景:

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

问题描述

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+");
    }

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

文章来源:https://blog.csdn.net/qq_44936245/article/details/135138213
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。