小课堂 | POI读取科学记数法字段不准确?问题复现、尝试和解决 |
您所在的位置:网站首页 › poi复制单元格 › 小课堂 | POI读取科学记数法字段不准确?问题复现、尝试和解决 |
上周,有一个简单的跑批任务,跑批之前对文件进行了解析和比对,发现针对科学记数法表示的统一社会信用代码,POI读取出来后与原值不一致。 本文记录一下问题复现、所做尝试、问题解决以及如何防止。 问题重现原始数据 具体内容如下: 问题重现 读取含有科学记数法的Excel文件,重现问题。 本文使用了多个populateValue方法来尝试读取,一个测试示例如下: 运行一下程序,然后发现数据有出入,比如: 914403000944125000 变成 914403000944125060不同尝试尝试 1、 将单元格设置为 “文本” 重新执行,问题依然存在。 尝试 2、 自定义 + 数字占位符# 调整靠左对齐 重新执行,问题依然存在。 尝试 3、 使用数据 -> 分列 设置单元格 点击“数据” -> "分列" 点击“下一步” 直到选中列数据格式为“文本”, 并点击“完成”按钮。 操作之后,文件内容如下表所示: 然后,重新执行程序,发现结果都按照文本读取正确值。 思考针对涉及诸如身份证号、社会信用统一代码等长字段的Excel导入,读取时需要较为小心,如遇到纯数字的场景,会采用科学记数法记录,POI读取的时候可能不准确。 在上述的测试中,貌似纯数字长度大于11位的时候会转换成科学记数法。 我们可以增加一层校验,如读取的内容是数字类型,且使用了科学记数法,可以提示一下,如“xxx包含科学记数法,请转换成文本格式再进行导入”。 一个简单的判断示例如下: //如为Numeric类型 String result = cell.getNumericCellValue() + ""; if(result.contains("E")) { //抛出格式错误信息 }如读者有其它好的办法,也可以分享出来。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |