alibaba/easyexcel

数字类型读取,精度与无效小数问题

Open

#3,399 创建于 2023年8月11日

在 GitHub 查看
 (1 评论) (0 反应) (0 负责人)Java (7,599 fork)batch import
help wanted

仓库指标

Star
 (33,728 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

功能需求:限制用户输入小数位数 异常场景举例:xlsx文件,限制最大输入4位小数,用户输入4.6,最后读取的值为4.60000000000000,导致有效输入校验失败 场景复现: easyexcel版本:3.3.2 源输入: image POI读取:4.5999999999999996 easyexcel转换后(tempCellData.getOriginalNumberValue().round(EasyExcelConstants.EXCEL_MATH_CONTEXT))):4.60000000000000 临时解决方案,自定义数字转换去掉无意义的0: public static class CustomNumberConverter implements Converter { @Override public Class<?> supportJavaTypeKey() { return BigDecimal.class; }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.NUMBER;
    }

    @Override
    public BigDecimal convertToJavaData(ReadConverterContext<?> context) throws Exception {
        return context.getReadCellData().getNumberValue().stripTrailingZeros();
    }

    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<BigDecimal> context) throws Exception {
        return Converter.super.convertToExcelData(context);
    }
}

我想问下有什么方法能源头解决读取到的精度就不丢失吗?

贡献者指南