Java数学工具类MathUtil详解
本文实例为大家分享了Java数学工具类MathUtil的具体代码,供大家参考,具体内容如下
packagecn.xbz.util.math;
importjava.math.BigDecimal;
/**
*@title数学计算工具类
*@description提供常用的数值加减乘除计算,及多个数值的求和,平均值,最大最小值计算
*/
publicclassXMathUtil{
/**默认的除法精确度*/
privatestaticfinalintDEF_DIV_SCALE=2;
/**
*精确加法运算
*@paramv1被加数
*@paramv2加数
*@return两个参数的和(BigDecimal)
*/
publicstaticBigDecimaladd(BigDecimalv1,BigDecimalv2){
if(null==v1){
v1=BigDecimal.ZERO;
}
if(null==v2){
v2=BigDecimal.ZERO;
}
returnv1.add(v2);
}
/**
*精确减法运算
*@paramv1被减数
*@paramv2减数
*@return两个参数的差(BigDecimal)
*/
publicstaticBigDecimalsubtract(BigDecimalv1,BigDecimalv2){
if(null==v1){
v1=BigDecimal.ZERO;
}
if(null==v2){
v2=BigDecimal.ZERO;
}
returnv1.subtract(v2);
}
/**
*精确乘法运算
*@paramv1被乘数
*@paramv2乘数
*@return两个参数的积(BigDecimal)
*/
publicstaticBigDecimalmultiply(BigDecimalv1,BigDecimalv2){
if(null==v1){
v1=BigDecimal.ONE;
}
if(null==v2){
v2=BigDecimal.ONE;
}
returnv1.multiply(v2);
}
/**
*(相对)精确除法运算,当发生除不尽情况时,精确到小数点以后2位,以后数字四舍五入
*@paramv1被除数
*@paramv2除数
*@return两个参数的商(BigDecimal)
*/
publicstaticBigDecimaldivide(BigDecimalv1,BigDecimalv2){
returnv1.divide(v2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP);
}
/**
*(相对)精确除法运算.当发生除不尽情况时,由scale参数指定精度,以后数字四舍五入
*@paramv1被除数
*@paramv2除数
*@paramscale表示表示需要精确到小数点以后几位
*@return两个参数的商(BigDecimal)
*/
publicstaticBigDecimaldivide(BigDecimalv1,BigDecimalv2,Integerscale){
if(null==v1){
returnBigDecimal.ZERO;
}
if(null==v2){
v2=BigDecimal.ONE;
}
if(v2.compareTo(BigDecimal.ZERO)==0){
thrownewIllegalArgumentException("除数不能为0");
}
if(scale<0){
thrownewIllegalArgumentException("精确度不能小于0");
}
returnv1.divide(v2,scale,BigDecimal.ROUND_HALF_UP);
}
/**
*精确加法运算
*@paramv1被加数
*@paramv2加数
*@return两个参数的和(String)
*/
publicstaticStringadd(Stringv1,Stringv2){
if(isBlank(v1)){
v1="0";
}
if(isBlank(v2)){
v2="0";
}
BigDecimalb1=newBigDecimal(v1.trim());
BigDecimalb2=newBigDecimal(v2.trim());
returnString.valueOf(add(b1,b2));
}
/**
*精确减法运算
*@paramv1被减数
*@paramv2减数
*@return两个参数的差(String)
*/
publicstaticStringsubtract(Stringv1,Stringv2){
if(isBlank(v1)){
v1="0";
}
if(isBlank(v2)){
v2="0";
}
BigDecimalb1=newBigDecimal(v1.trim());
BigDecimalb2=newBigDecimal(v2.trim());
returnString.valueOf(subtract(b1,b2));
}
/**
*精确乘法运算
*@paramv1被乘数
*@paramv2乘数
*@return两个参数的积(String)
*/
publicstaticStringmultiply(Stringv1,Stringv2){
if(isBlank(v1)){
v1="1";
}
if(isBlank(v2)){
v2="1";
}
BigDecimalb1=newBigDecimal(v1.trim());
BigDecimalb2=newBigDecimal(v2.trim());
returnString.valueOf(multiply(b1,b2));
}
/**
*(相对)精确除法运算,当发生除不尽情况时,精确到小数点以后2位,以后数字四舍五入
*@paramv1被除数
*@paramv2除数
*@return两个参数的商(String)
*/
publicstaticStringdivide(Stringv1,Stringv2){
returndivide(v1,v2,DEF_DIV_SCALE);
}
/**
*(相对)精确除法运算.当发生除不尽情况时,由scale参数指定精度,以后数字四舍五入
*@paramv1被除数
*@paramv2除数
*@paramscale表示表示需要精确到小数点以后几位
*@return两个参数的商(String)
*/
publicstaticStringdivide(Stringv1,Stringv2,Integerscale){
if(null==v1){
return"0";
}
if(null==v2){
v2="1";
}
BigDecimalb1=newBigDecimal(v1.trim());
BigDecimalb2=newBigDecimal(v2.trim());
returnString.valueOf(divide(b1,b2,scale));
}
/**
*精确加法运算,计算多个数值总和,若其中有null值则忽略
*@paramvalList被加数集合
*@return两个参数的和(BigDecimal)
*/
publicstaticBigDecimalsum(BigDecimalv1,BigDecimal...valList){
if(null==v1){
v1=BigDecimal.ZERO;
}
if(null==valList||valList.length==0){
returnv1;
}
for(BigDecimalval:valList){
if(null!=val){
v1=v1.add(val);
}
}
returnv1;
}
/**
*精确加法运算,计算多个数值总和,若其中有null值则忽略
*@paramvalList被加数集合
*@return两个参数的和(String)
*/
publicstaticStringsum(Stringv1,String...valList){
if(isBlank(v1)){
v1="0";
}
if(null==valList||valList.length==0){
returnv1;
}
BigDecimalb1=newBigDecimal(v1.trim());
for(Stringval:valList){
if(!isBlank(val)){
b1=add(b1,newBigDecimal(val.trim()));
}
}
returnString.valueOf(b1);
}
/**
*平均数
*@paramvalList
*@return
*/
publicstaticBigDecimalavg(BigDecimal...valList){
if(null!=valList&&valList.length!=0){
returndivide(sum(BigDecimal.ZERO,valList),newBigDecimal(valList.length));
}
returnBigDecimal.ZERO;
}
/**
*平均数
*@paramvalList
*@return
*/
publicstaticStringavg(String...valList){
if(null!=valList&&valList.length!=0){
returndivide(sum("0",valList),String.valueOf(valList.length));
}
return"0";
}
/**
*最大值
*@paramv1
*@paramvalList
*@return
*/
publicstaticBigDecimalmax(BigDecimalv1,BigDecimal...valList){
BigDecimalmax=v1;
if(null==valList||valList.length==0){
returnmax;
}
for(BigDecimalval:valList){
if(null!=val&&val.compareTo(max)>0){
max=val;
}
}
returnmax;
}
/**
*最大值
*@paramvalList
*@return
*/
publicstaticBigDecimalmaxArr(BigDecimal...valList){
if(null==valList||valList.length==0){
returnnull;
}
returnmax(valList[0],valList);
}
/**
*最小值
*@paramv1
*@paramvalList
*@return
*/
publicstaticBigDecimalmin(BigDecimalv1,BigDecimal...valList){
BigDecimalmin=v1;
if(null==valList||valList.length==0){
returnmin;
}
for(BigDecimalval:valList){
if(null!=val&&val.compareTo(min)<0){
min=val;
}
}
returnmin;
}
/**
*最小值
*@paramvalList
*@return
*/
publicstaticBigDecimalminArr(BigDecimal...valList){
if(null==valList||valList.length==0){
returnnull;
}
returnmin(valList[0],valList);
}
/**
*最大值
*@paramv1
*@paramvalList
*@return
*/
publicstaticStringmax(Stringv1,String...valList){
if(isBlank(v1)){
returnnull;
}
if(null==valList||valList.length==0){
returnv1;
}
BigDecimalmaxBd=newBigDecimal(v1.trim());
for(Stringval:valList){
if(!isBlank(val)&&newBigDecimal(val).compareTo(maxBd)>0){
maxBd=newBigDecimal(val);
}
}
returnString.valueOf(maxBd);
}
/**
*最大值
*@paramvalList
*@return
*/
publicstaticStringmaxArr(String...valList){
if(null==valList||valList.length==0){
returnnull;
}
returnmax(valList[0],valList);
}
/**
*最小值
*@paramv1
*@paramvalList
*@return
*/
publicstaticStringmin(Stringv1,String...valList){
if(isBlank(v1)){
returnnull;
}
if(null==valList||valList.length==0){
returnv1;
}
BigDecimalminBd=newBigDecimal(v1.trim());
for(Stringval:valList){
if(!isBlank(val)&&newBigDecimal(val).compareTo(minBd)<0){
minBd=newBigDecimal(val);
}
}
returnString.valueOf(minBd);
}
/**
*最小值
*@paramvalList
*@return
*/
publicstaticStringminArr(String...valList){
if(null==valList||valList.length==0){
returnnull;
}
returnmin(valList[0],valList);
}
/**
*判断字符串是否为空(不依赖第三方)
*@paramstr
*@return
*/
privatestaticbooleanisBlank(Stringstr){
returnnull==str||str.trim().length()==0;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。