【Bug】Apache POI 读取Excel小数补位问题

使用 Apache POI 读取导入的Excel的小数数据时,发现原本的小数值精度发生变化:

导入的是 0.6314,读取的却是 0.6314000000000001

导入的是 0.5207,读取的却是 0.5206999999999999

这种情况是 float数值转成double时增加补位的问题,要解决这个问题可以通过BigDecimal保留固定为小数,但不够准确,如果要将补位后的小数还原,则可以将其再转为float类型的数值即可:

java 复制代码
Cell cell = row.getCell(i);
double val = cell.getNumericCellValue();
String strVal = String.valueOf(val);
String decimalPart = strVal.substring(strVal.indexOf(".") + 1);
// 处理 float 类型转为 double后补0导致小数位不准确的情况(判断方法很粗暴)
BigDecimal newVal = null;
if (decimalPart.contains("00000") || decimalPart.contains("99999")) {
    Float floatVal = new Float(strVal);
    newValc = new BigDecimal(floatVal.toString());
} else {
    newVal = new BigDecimal(strVal);
}
相关推荐
小筱在线8 分钟前
SpringCloud微服务实现服务熔断的实践指南
java·spring cloud·微服务
luoluoal13 分钟前
java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
java·vue.js·spring boot
ChinaRainbowSea18 分钟前
十三,Spring Boot 中注入 Servlet,Filter,Listener
java·spring boot·spring·servlet·web
小游鱼KF21 分钟前
Spring学习前置知识
java·学习·spring
扎克begod25 分钟前
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
java·开发语言·python
青灯文案126 分钟前
SpringBoot 项目统一 API 响应结果封装示例
java·spring boot·后端
我就是程序猿36 分钟前
tomcat的配置
java·tomcat
阳光阿盖尔42 分钟前
EasyExcel的基本使用——Java导入Excel数据
java·开发语言·excel
二十雨辰44 分钟前
[苍穹外卖]-12Apache POI入门与实战
java·spring boot·mybatis
程序员皮皮林44 分钟前
开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)
java·pdf·开源·apache