项目中导入功能使用组件为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个地方都要改。
下面是导入后返回的文件,数据精度没有改变。