项目中导入功能使用组件为easyexcel,导入有个字段是数值类型的,后台使用BigDecimal类型。

测试提bug该字段值变了,经查是easyexcel版本原因导致的,项目中使用的是2.1.7版本,网上说升级成2.2.6以上就好了,项目中升级成最新版本2.2.10了。

 

 

结果小数位超过6位,有的值被取整了(测试数据为999.99999999),有的被截取了(测试数据999.999999999)。测试数据小数位3-6位的值没有发生改变。等于好了一半,还有一半不行。debug测试发现读取excel的时候就已经是这样了。后来想起excel单元格设置,将该列设置为文本格式,再次导入测试发现数据都正常了。

 

 

 

 String patternConversionRatio = "^\\d{1,4}(\\.\\d{1,6})?$";
            if (NumberUtils.isCreatable(conversionRatio)) {
                flag = checkValueNotNull(conversionRatio, "转换比", flag, sb);
                if (StringUtils.isNotBlank(conversionRatio)) {
                    flag = checkValueLength(conversionRatio, "转换比", 64, flag, sb);
                    flag = checkValuePattern(conversionRatio, "转换比大于0,支持小数(最多6位),最大输入小于10000", flag, sb, patternConversionRatio);
                }
                modle.setConversionRatio(new BigDecimal(conversionRatio).toString());
            } else {
                flag = false;
                sb.append("转换比不是数字;");
            }
 @ExcelProperty(value = "转换比")
    private String conversionRatio;

解析excel的实体类,接值时用的String。存入数据库时的实体类才转换为BigDecimal。网上说版本升级就行,其实还有导入模板列设置为:文本,2个地方都要改。

下面是导入后返回的文件,数据精度没有改变。