作者 RuoYi

Excel注解支持设置BigDecimal精度&舍入规则

@@ -4,6 +4,7 @@ import java.lang.annotation.ElementType; @@ -4,6 +4,7 @@ import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention; 4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy; 5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target; 6 import java.lang.annotation.Target;
  7 +import java.math.BigDecimal;
7 8
8 /** 9 /**
9 * 自定义导出Excel数据注解 10 * 自定义导出Excel数据注解
@@ -30,7 +31,7 @@ public @interface Excel @@ -30,7 +31,7 @@ public @interface Excel
30 public String dateFormat() default ""; 31 public String dateFormat() default "";
31 32
32 /** 33 /**
33 - * 如果是字典类型,请设置字典的type值 34 + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
34 */ 35 */
35 public String dictType() default ""; 36 public String dictType() default "";
36 37
@@ -45,6 +46,16 @@ public @interface Excel @@ -45,6 +46,16 @@ public @interface Excel
45 public String separator() default ","; 46 public String separator() default ",";
46 47
47 /** 48 /**
  49 + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
  50 + */
  51 + public int scale() default -1;
  52 +
  53 + /**
  54 + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
  55 + */
  56 + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
  57 +
  58 + /**
48 * 导出类型(0数字 1字符串) 59 * 导出类型(0数字 1字符串)
49 */ 60 */
50 public ColumnType cellType() default ColumnType.STRING; 61 public ColumnType cellType() default ColumnType.STRING;
@@ -8,6 +8,7 @@ import java.io.OutputStream; @@ -8,6 +8,7 @@ import java.io.OutputStream;
8 import java.lang.reflect.Field; 8 import java.lang.reflect.Field;
9 import java.lang.reflect.Method; 9 import java.lang.reflect.Method;
10 import java.math.BigDecimal; 10 import java.math.BigDecimal;
  11 +import java.text.DecimalFormat;
11 import java.util.ArrayList; 12 import java.util.ArrayList;
12 import java.util.Arrays; 13 import java.util.Arrays;
13 import java.util.Comparator; 14 import java.util.Comparator;
@@ -546,10 +547,14 @@ public class ExcelUtil<T> @@ -546,10 +547,14 @@ public class ExcelUtil<T>
546 { 547 {
547 cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); 548 cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
548 } 549 }
549 - else if (StringUtils.isNotEmpty(dictType)) 550 + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value))
550 { 551 {
551 cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); 552 cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator));
552 } 553 }
  554 + else if (value instanceof BigDecimal && -1 != attr.scale())
  555 + {
  556 + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
  557 + }
553 else 558 else
554 { 559 {
555 // 设置列类型 560 // 设置列类型
@@ -896,7 +901,14 @@ public class ExcelUtil<T> @@ -896,7 +901,14 @@ public class ExcelUtil<T>
896 } 901 }
897 else 902 else
898 { 903 {
899 - val = new BigDecimal(val.toString()); // 浮点格式处理 904 + if ((Double) val % 1 > 0)
  905 + {
  906 + val = new BigDecimal(val.toString());
  907 + }
  908 + else
  909 + {
  910 + val = new DecimalFormat("0").format(val);
  911 + }
900 } 912 }
901 } 913 }
902 else if (cell.getCellTypeEnum() == CellType.STRING) 914 else if (cell.getCellTypeEnum() == CellType.STRING)