1.格式化策略枚举定义
/**
* @desc: BigDecimal格式化策略
* @author: tianpanke
* @create: 2019-12-12 10:20
**/
public enum BigDecimalFormatPolicy {
ROUND_HALF_UP(1,"四舍五入"),
ROUND_CUT_TAIL(2,"截尾");
private Integer value;
private String text;
BigDecimalFormatPolicy(Integer value,String text){
this.value=value;
this.text=text;
}
public Integer getValue() {
return value;
}}
2. 转换器定义
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
/**
* @program: ffc-reconciliation
* @description: 金额类型字段导出转换器
* @author: tianpanke
* @create: 2020-06-12
**/
public class BigDecimalOutConvert implements Converter {
private String pattern="0.00"; //格式化 模式
private BigDecimalFormatPolicy formatPolicy=BigDecimalFormatPolicy.ROUND_HALF_UP;//默认 四舍五入
public BigDecimalOutConvert(){
}
public BigDecimalOutConvert(String pattern, BigDecimalFormatPolicy formatPolicy){
this.pattern=pattern;
this.formatPolicy=formatPolicy;
}
@Override
public Class supportJavaTypeKey() {
return BigDecimal.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public BigDecimal convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
@Override
public CellData convertToExcelData(BigDecimal value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
//数据格式化
RoundingMode roundingMode=(formatPolicy==BigDecimalFormatPolicy.ROUND_HALF_UP)?Roun dingMode.HALF_UP:RoundingMode.DOWN;
DecimalFormat decimalFormat=new DecimalFormat(pattern);
decimalFormat.setRoundingMode(roundingMode);
String formatResult=decimalFormat.format(value);
return new CellData<>(formatResult);
}
}
3.在数据写出时注册格式化器
excelWriterBuilder.registerConverter(new BigDecimalOutConvert());