Java使用BigDecimal进行运算封装的实际案例
日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这个,简单粗暴好用,话不多说,代码奉上(该工具类需要引入google的一个jar,com.google.common.base.Optional,具体maven引入看文章末尾):
importjava.math.BigDecimal;
publicclassNumberArithmeticUtils{
/**
*BigDecimal的加法运算封装
*@paramb1
*@parambn
*@return
*/
publicstaticBigDecimalsafeAdd(BigDecimalb1,BigDecimal...bn){
if(null==b1){
b1=BigDecimal.ZERO;
}
if(null!=bn){
for(BigDecimalb:bn){
b1=b1.add(null==b?BigDecimal.ZERO:b);
}
}
returnb1;
}
/**
*Integer加法运算的封装
*@paramb1第一个数
*@parambn需要加的加法数组
*@注:Optional是属于com.google.common.base.Optional下面的class
*@return
*/
publicstaticIntegersafeAdd(Integerb1,Integer...bn){
if(null==b1){
b1=0;
}
Integerr=b1;
if(null!=bn){
for(Integerb:bn){
r+=Optional.fromNullable(b).or(0);
}
}
returnr>0?r:0;
}
/**
*计算金额方法
*@paramb1
*@parambn
*@return
*/
publicstaticBigDecimalsafeSubtract(BigDecimalb1,BigDecimal...bn){
returnsafeSubtract(true,b1,bn);
}
/**
*BigDecimal的安全减法运算
*@paramisZero减法结果为负数时是否返回0,true是返回0(金额计算时使用),false是返回负数结果
*@paramb1被减数
*@parambn需要减的减数数组
*@return
*/
publicstaticBigDecimalsafeSubtract(BooleanisZero,BigDecimalb1,BigDecimal...bn){
if(null==b1){
b1=BigDecimal.ZERO;
}
BigDecimalr=b1;
if(null!=bn){
for(BigDecimalb:bn){
r=r.subtract((null==b?BigDecimal.ZERO:b));
}
}
returnisZero?(r.compareTo(BigDecimal.ZERO)==-1?BigDecimal.ZERO:r):r;
}
/**
*整型的减法运算,小于0时返回0
*@paramb1
*@parambn
*@return
*/
publicstaticIntegersafeSubtract(Integerb1,Integer...bn){
if(null==b1){
b1=0;
}
Integerr=b1;
if(null!=bn){
for(Integerb:bn){
r-=Optional.fromNullable(b).or(0);
}
}
returnnull!=r&&r>0?r:0;
}
/**
*金额除法计算,返回2位小数(具体的返回多少位大家自己看着改吧)
*@paramb1
*@paramb2
*@return
*/
publicstaticBigDecimalsafeDivide(Tb1,Tb2){
returnsafeDivide(b1,b2,BigDecimal.ZERO);
}
/**
*BigDecimal的除法运算封装,如果除数或者被除数为0,返回默认值
*默认返回小数位后2位,用于金额计算
*@paramb1
*@paramb2
*@paramdefaultValue
*@return
*/
publicstaticBigDecimalsafeDivide(Tb1,Tb2,BigDecimaldefaultValue){
if(null==b1||null==b2){
returndefaultValue;
}
try{
returnBigDecimal.valueOf(b1.doubleValue()).divide(BigDecimal.valueOf(b2.doubleValue()),2,BigDecimal.ROUND_HALF_UP);
}catch(Exceptione){
returndefaultValue;
}
}
/**
*BigDecimal的乘法运算封装
*@paramb1
*@paramb2
*@return
*/
publicstaticBigDecimalsafeMultiply(Tb1,Tb2){
if(null==b1||null==b2){
returnBigDecimal.ZERO;
}
returnBigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue())).setScale(2,BigDecimal.ROUND_HALF_UP);
}
}
Optional所在的jar以及版本:guava-18.0.ar
pom.xml配置:
com.google.guava guava 18.0
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接