功能需求:限制用户输入小数位数
异常场景举例:xlsx文件,限制最大输入4位小数,用户输入4.6,最后读取的值为4.60000000000000,导致有效输入校验失败
场景复现:
easyexcel版本:3.3.2
源输入:
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);
}
}
我想问下有什么方法能源头解决读取到的精度就不丢失吗?
1条答案
按热度按时间cmssoen21#