alibaba/easyexcel

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

Open

#3399 aperta il 11 ago 2023

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Java (7599 fork)batch import
help wanted

Metriche repository

Star
 (33.728 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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

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

Guida contributor