【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);
}
相关推荐
NignSah几秒前
Microsoft Excel World Championship 2025-2025EXCEL大赛,折纸
microsoft·excel
提笔忘字的帝国几秒前
【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程
java·开发语言·macos
hhzz3 分钟前
Springboot项目中使用POI操作Excel(详细教程系列1/3)
spring boot·后端·excel·poi·easypoi
抹香鲸之海6 分钟前
Easyexcel 多级横向合并表头
java·开发语言·windows
林月明7 分钟前
【VBA】点击一个按钮实现自动更新excel文件列数据
excel·vba·宏文件·一键数据更新
雒珣8 分钟前
qt界面和图片疯狂变大的bug问题
开发语言·qt·bug
天才测试猿9 分钟前
软件测试之bug分析定位技巧
软件测试·python·selenium·测试工具·职场和发展·测试用例·bug
烟沙九洲10 分钟前
JVM 堆内存分代
java·jvm
BD_Marathon10 分钟前
SpringMVC——bean加载控制
java·开发语言·数据库
悟空码字17 分钟前
SpringBoot + Redis分布式锁深度剖析,性能暴涨的秘密全在这里
java·spring boot·后端