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 */ publicstatic BigDecimalsafeDivide(Tb1,Tb2){ returnsafeDivide(b1,b2,BigDecimal.ZERO); } /** *BigDecimal的除法运算封装,如果除数或者被除数为0,返回默认值 *默认返回小数位后2位,用于金额计算 *@paramb1 *@paramb2 *@paramdefaultValue *@return */ publicstatic BigDecimalsafeDivide(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 */ publicstatic BigDecimalsafeMultiply(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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接