alibaba/easyexcel

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

Open

#3 399 ouverte le 11 août 2023

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)Java (7 599 forks)batch import
help wanted

Métriques du dépôt

Stars
 (33 728 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

功能需求:限制用户输入小数位数 异常场景举例: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);
    }
}

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

Guide contributeur