服了呀,日踩一坑,之前做过一个批量导入数据的功能,测试测得时候发现结果文件显示有多条数据不存在(在导入之前会根据三条信息,查询基础库里面是否存在),我用条件一单独查了一下基础库,竟然能查出来。我勒个去了,又把程序看了一遍想了一遍,感觉根本不可能呀。把生产上基础库里的数据导到了我的本地开发库里,然后拿到开发环境侧了一下,导第一遍,还真是导入失败了,看了一下结果文件显示库里没有这条信息(刚刚导入的)。
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+");
}
今天又是什么都没干的一天,晚上加班写文档。一天踩一个坑,把我埋了算了。