JAVA使用poi解析execl解决数值被转为科学计数法(如:手机号、身份证号、电话、等)解决方法

文章讲述了Excel中数字存储的两种形式,数值和文本。当数字超过15位时,Excel会使用科学计数法,且超过第15位的数字会被简化,导致精度丢失且不可逆。提供了一个Java代码片段用于处理Excel中科学计数法的列,确保数字完整显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、原由

  1.  大家都知道数字在EXCEL表格中存储时有两种表现形式。1.数字作为数值存储。当数字作为数值存储时,单元格中的数字可以参与数学运算。2.数字作为文本存储。当数字作为文本存储时,单元格中的数值不能够参与数学运算。
  2.  数字作为文本存储时,如果没有更改单元格中的内容,单元格中的值就不会发生变化。G2单元格中的值之所以发生改变,其实是因为G2单元格中的数值被以数值的形式存储了,而作为一个数值,123456789987654321这个数值的位数有18位,我们知道一个9位数已经是“亿”级别,这个数已经达到了“亿亿”级别,说这个数是天文数字,一点也不夸张。
  3.  对于一个非常大的数,为了表示方便,科学上常常采用科学计数法的形式来表示。而采用科学计数法表示的时候,小数点位数不能太多,否则的话,这个数字仍然会写的很长,科学计数法书写起来仍然不方便,所以后面的一些数字会以数字0代替,然后在科学计数法中直接省略不写。例如123456789准确的科学计数表示法为1.23456789×10常,但这样写起来依然很长,为了书写上的方便,就损失一些精度,将其表示1.2340000×10,因为小数点后面的0可以省略不写,就可以简写为1.234×108。

小结论

 这个天文数字在EXCEL中被用科学计数法表示,只要这个数字的位数超过15位,那么第15位以后的数字就会被用数字0表示,此时这个数字不可以再恢复成原来的数字,这是个不可逆的过程。如果该数字的位数在15位以内(包括15位),那么即使该数字被用科学计数法表示,其值仍然可以恢复。

2、解决方法

  1. 修改execl中为科学计数法的列

     

  2. 当然有时候因为业务不能去修改execl文件的,我们需要通过代码的方式进行解决

    1. private static String formatDoubleValue(Cell cell) {
              String cellValue=null;
              // 以下是判断数据的类型
              switch (cell.getCellType()) {
                  case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                      DecimalFormat df = new DecimalFormat("0");
                      cellValue = df.format(cell.getNumericCellValue());
                      break;
                  case HSSFCell.CELL_TYPE_STRING: // 字符串
                      cellValue = cell.getStringCellValue();
                      break;
                  case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                      cellValue = cell.getBooleanCellValue() + "";
                      break;
                  case HSSFCell.CELL_TYPE_FORMULA: // 公式
                      cellValue = cell.getCellFormula() + "";
                      break;
                  case HSSFCell.CELL_TYPE_BLANK: // 空值
                      cellValue = "";
                      break;
                  case HSSFCell.CELL_TYPE_ERROR: // 故障
                      cellValue = null;
                      break;
                  default:
                      cellValue = null;
                      break;
              }
              return cellValue;
          }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟小杰子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值