解决java读取EXCEL数据变成科学计数法的问题
问题背景
excel导入数据经常遇到会有手机号或身份证号导入后变成科学计数法的形式给维护数据带来了很多麻烦 此时手机号是数字的形式,而我们需要的是字符的形式,如下图,特征是有个绿色三角的上标
解决方案
解决思路
考虑问题一般从,输入,处理,输出三个方面考虑。那么可以首先调整导入的数据本身,主动调整成正确的格式,或者在处理逻辑的时候进行判断调整,因此我们可以有两个方案
1.修改导入excel数据本身为字符
在excel文件中,选中手机号列–数据–分列–下一步–下一步–文本–完成再重新导入即可
本方法适用于无法调整代码逻辑的情形,比如线上环境。 缺点显而易见,每次维护数据都得注意格式
2.代码逻辑处理科学计数法
2.1处理逻辑
拿到excel上传为字符串 -> 正则去匹配校验字符串是否为科学计数法 -> 是,则将科学计数法字符串转化成数字的字符串 -> 赋值给原有的变量
2.2show me the code
/** * 将科学计数法文本转换成字符文本 * @param number * @return */ public String translateToPlainStr(String number) { if (StringUtil.isNull(number)) { return number; } String regEx="^([\+|-]?\d+(.{0}|.\d+))[Ee]{1}([\+|-]?\d+)$"; // 编译正则表达式 Pattern pattern = Pattern.compile(regEx); // 忽略大小写的写法 // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(number); // 字符串是否与正则表达式相匹配 boolean rs = matcher.matches(); // 判断是否为字符串的科学计数法 if(rs){ // 科学计数法转数字 BigDecimal originValue = new BigDecimal(number); System.out.println("手机号为 ==> " + one.toPlainString()); // 数字转字符串 return originValue.toPlainString(); } return number; }
处理结果
下一篇:
【JavaEE】多线程之Thread类