項目中導入功能使用組件為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個地方都要改。
下面是導入后返回的文件,數據精度沒有改變。