【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);
}
相关推荐
shaoFan113 小时前
关于java 调用阿里千问大模型,流式返回,并返回给前端
java·前端·状态模式
雪碧聊技术13 小时前
Java历史—沙箱安全机制
java·安全·沙箱机制
java1234_小锋13 小时前
Spring AI 2.0 开发Java Agent智能体 - Spring AI 2.0简介
java·人工智能·spring·spring ai
Hesionberger13 小时前
LeetCode72.编辑距离(多维动态规划)
java·开发语言·c++·python·算法
人道领域13 小时前
【LeetCode刷题日记】1047:双栈法与双指针法巧妙消除相邻重复字符
java·算法·leetcode·职场和发展
第五文修13 小时前
wps表格内编写一个JSA宏用来背单词
excel·wps
Java成神之路-13 小时前
面试题:@Controller 与 @RestController 区别
java·spring boot
用户2986985301413 小时前
Java 提取 HTML 文本内容:两种轻量级实现方案对比
java·后端
lihao lihao13 小时前
Linux文件与fd
java·linux·算法
小脑斧12314 小时前
DBExport2.51 Oracle数据库查询与Excel数据导出工具
数据库·oracle·excel