alibaba/easyexcel

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

Open

#3.399 geöffnet am 11. Aug. 2023

Auf GitHub ansehen
 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)Java (7.599 Forks)batch import
help wanted

Repository-Metriken

Stars
 (33.728 Stars)
PR-Merge-Metriken
 (Keine gemergten PRs in 30 T)

Beschreibung

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

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

Contributor Guide