BigDecimal 的流式计算工具
前言
简单的数据连续计算
例如:在项目开发过程中,存在一个复杂
,但是运算符简单
的计算逻辑,并且存在多种数据类型时,使用BigDecimal来进行计算时,又需要一直创建。所以就产生了改工具类。对多种类型进行封装,使用建造者模式进行快速处理,达到代码简洁的效果。
一、依赖
本工具依赖 Hutool
工具包的NumberUtil,算的对其的一种扩展。
因为这个类只能实现单一的多个元素计算,无法实现链式的计算。
二、BigDecimalChain 说明
1.方法说明
方法名 | 说明 | 是否必须 |
---|---|---|
chain | 构造链,并且初始化数据 | 是 |
add | 加法 | 否 |
sub | 减法 | 否 |
mul | 乘法 | 否 |
div | 除法 | 否 |
scale | 设置精度与小数位处理(四舍五入等) | 否 |
get | 获取最终结果 | 是 |
代码中存在大量的方法重载,以满足不同的需求。可以根据具体业务,再自行扩展新的重载。
如果不需要 NumberUtil 的依赖,可以自行将其替换掉即可。
import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 功能描述: BigDecimal的链式计算 <br/>
* 依赖hutool 的 NumberUtil
*/
public class BigDecimalChain {
/** 返回结果*/
private BigDecimal result;
private BigDecimalChain(BigDecimal result) {
this.result = result;
}
/**
* 功能描述: 构造链 <br/>
*/
public static BigDecimalChain chain(BigDecimal bd) {
return new BigDecimalChain(bd);
}
/**
* 功能描述: 构造链 <br/>
*/
public static BigDecimalChain chain(String bd) {
isNumber(bd);
return new BigDecimalChain(new BigDecimal(bd));
}
/**
* 功能描述: 构造链 <br/>
*/
public static BigDecimalChain chain(long bd) {
return new BigDecimalChain(BigDecimal.valueOf(bd));
}
/**
* 功能描述: 构造链 <br/>
*/
public static BigDecimalChain chain(double bd) {
return new BigDecimalChain(BigDecimal.valueOf(bd));
}
/** 加 */
public BigDecimalChain add(BigDecimal v) {
this.result = result.add(v);
return this;
}
/** 加 */
public BigDecimalChain add(String v) {
isNumber(v);
this.result = result.add(new BigDecimal(v));
return this;
}
/** 加 */
public BigDecimalChain add(String... vs) {
this.result = result.add(NumberUtil.add(vs));
return this;
}
/** 加 */
public BigDecimalChain add(int v1) {
this.result = result.add(new BigDecimal(Integer.toString(v1)));
return this;
}
/** 加 */
public BigDecimalChain add(float v1) {
this.result = result.add(new BigDecimal(Float.toString(v1)));
return this;
}
/** 加 */
public BigDecimalChain add(double v1) {
this.result = result.add(new BigDecimal(Double.toString(v1)));
return this;
}
/** 加 */
public BigDecimalChain add(int v1, int v2) {
this.result = result.add(NumberUtil.add(new Number[]{
v1, v2}));
return this;
}
/** 加 */
public BigDecimalChain add(float v1, float v2) {
this.result = result.add(NumberUtil.add