博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 科学计数法转成完整数字展示;double类型小数值不准确处理
阅读量:7227 次
发布时间:2019-06-29

本文共 1706 字,大约阅读时间需要 5 分钟。

首先是从Excel里面读数据的时候,Excel里面的数据是数字,太大,其实也不是数字,就是个银行卡号,复制进去,就自动成数字啦,然后就变成科学计数法啦,在使用poi读取数据的时候,读出来的就是科学计数法的数字,tostring之后,就不是我们想要的数据啦,这是一种情况。

还有一种情况,就是Excel里面的小数比如,1.2读出来可能就是1.19999,这个就是double类型的小数的值不准确的问题啦。

说是可以使用 BigDecimal 类来解决这个问题,但是,这个类要想使用好,也得有一番实践操作的。

先看代码,

/**

  • BigDecimal的测试,要精确。

  • 还要使得科学计数法的数字,做完全的展示。

*/

private static void testBigDecimal() {

Double d = 1.6D;

//不准确的初始化

BigDecimal bigDecimal = new BigDecimal(d);

System.out.println(bigDecimal);

//使得结果精确的初始化姿势

bigDecimal = new BigDecimal(d.toString());

System.out.println(bigDecimal);

bigDecimal = new BigDecimal("6.214822313132341212666E+18");

System.out.println(bigDecimal.toPlainString());

}

再看下运行的结果。

可以看到差别了吗?

可以看到,这个构造函数传进去的参数类型不同,出来的结果,就很不一样。

所以,咱在使用这个类的时候,还是传个字符串类型的参数进去,这样就稳当点。

这样就解决啦,double类型的小数的不准确性的问题,不用去考虑,到底精确几位小数的问题。同时,还把科学计数法的数字,给格式化成OK的字符串来展示。

最后,就是为啥把这篇文章分在poi的分类里面,因为就是在读取Excel文档的数据的时候,发现的问题。

它读取每个cell的时候,会根据cell的类型不一样,获得的值也不一样。

还有就是,要是数字的话,他竟然还有科学计数法的问题,以及小数值不准确的问题,比如1.6,读出来可能就是1.59999

下面是获取 cell的值的方法

/**

  • 获取单元格数据内容为字符串类型的数据

  • @param cell Excel单元格

  • @return String 单元格数据内容

*/

public static String getCellStringValue(HSSFCell cell) {

String strCell;

switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:

strCell = cell.getStringCellValue();

break;

case HSSFCell.CELL_TYPE_NUMERIC:

Double value = cell.getNumericCellValue();

BigDecimal bd1 = new BigDecimal(Double.toString(value));

strCell = bd1.toPlainString();

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

strCell = String.valueOf(cell.getBooleanCellValue());

break;

case HSSFCell.CELL_TYPE_BLANK:

strCell = "";

break;

default:

strCell = null;

break;

}

return strCell;

}

重点就是当是数字类型的时候,就需要好好处理一下啦。不然,读取出来的数字要么是科学计数法,要么就是已经失去准确性的小数啦。

那就很尴尬啦

转载于:https://blog.51cto.com/14226273/2363431

你可能感兴趣的文章
干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
查看>>
D3.js入门
查看>>
一次和前端的相互甩锅的问题记录
查看>>
纯OC实现iOS DLNA投屏功能了解一下
查看>>
RxJava -- fromArray 和 Just 以及 interval
查看>>
LC #75 JS
查看>>
js正则验证代码库
查看>>
常见面试题—css实现垂直水平居中
查看>>
lc682. Baseball Game
查看>>
重学前端-css选择器
查看>>
iOS开发之扫描二维码
查看>>
Android黑科技: 快速找到view所在的xml文件
查看>>
linux分区方案
查看>>
003-Java技术体系
查看>>
超轻量模板引擎
查看>>
JavaScript 复习之 Object对象的相关方法
查看>>
JAVA之流程控制语句
查看>>
Spring Boot(1)
查看>>
Winodws 10 美化与调优
查看>>
apache安装及多域名解析及域名代理
查看>>