金额类型字段 + - * / 处理
parent
3c49ade7b4
commit
ee64140219
|
@ -0,0 +1,178 @@
|
|||
package aiyh.utils;
|
||||
|
||||
/**
|
||||
* @Author DYS
|
||||
* @Date 2023/3/25 18:08
|
||||
* @description create at weaver
|
||||
*/
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 金额类型. 支持自身的四则运算,并将this返回.
|
||||
*/
|
||||
public class AmountHandler implements Serializable {
|
||||
|
||||
private BigDecimal value;
|
||||
|
||||
/**
|
||||
* 提供默认精度10
|
||||
*/
|
||||
private int scale = 10;
|
||||
|
||||
public AmountHandler() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* double类型构造函数
|
||||
*
|
||||
* @param value
|
||||
*/
|
||||
public AmountHandler(double value) {
|
||||
this.value = new BigDecimal(Double.toString(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* String类型构造函数
|
||||
*
|
||||
* @param value
|
||||
*/
|
||||
public AmountHandler(String value) {
|
||||
this.value = new BigDecimal(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取得BigDecimal的值
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 两个double类型的数值相加
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double add(double v1, double v2) {
|
||||
AmountHandler a1 = new AmountHandler(v1);
|
||||
AmountHandler a2 = new AmountHandler(v2);
|
||||
return add(a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 两数相除
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double div(double v1, double v2) {
|
||||
AmountHandler a1 = new AmountHandler(v1);
|
||||
AmountHandler a2 = new AmountHandler(v2);
|
||||
return this.divide(a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 相减
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double sub(double v1, double v2) {
|
||||
AmountHandler a1 = new AmountHandler(v1);
|
||||
AmountHandler a2 = new AmountHandler(v2);
|
||||
return this.subtract(a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 相乘
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double mul(double v1, double v2) {
|
||||
AmountHandler a1 = new AmountHandler(v1);
|
||||
AmountHandler a2 = new AmountHandler(v2);
|
||||
return this.multiply(a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 两个Amount类型的数据进行相加
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double add(AmountHandler v1, AmountHandler v2) {
|
||||
return v1.getValue().add(v2.getValue()).doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 两个Amount类型变量相除
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double divide(AmountHandler v1, AmountHandler v2) {
|
||||
if (scale < 0) {
|
||||
throw new IllegalArgumentException("精度指定错误,请指定一个>=0的精度");
|
||||
}
|
||||
return v1.getValue().divide(v2.getValue(), scale,
|
||||
BigDecimal.ROUND_HALF_UP).doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 两数相乘
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double multiply(AmountHandler v1, AmountHandler v2) {
|
||||
return v1.getValue().multiply(v2.getValue()).doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 两数相减
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return
|
||||
*/
|
||||
public double subtract(AmountHandler v1, AmountHandler v2) {
|
||||
return v1.getValue().subtract(v2.getValue()).doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回value的浮点数值
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public double doubleValue() {
|
||||
return this.getValue().doubleValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置精度
|
||||
*
|
||||
* @param scale
|
||||
*/
|
||||
public void setScale(int scale) {
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
AmountHandler AmountHandler = new AmountHandler(5000.23);
|
||||
AmountHandler AmountHandler1 = new AmountHandler(2033.37);
|
||||
System.out.println(new AmountHandler().add(AmountHandler, AmountHandler1));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue