【Java】BigDecimal实现加减乘除运算代码
java.math.BigDecimal
BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:
第一种:BigDecimal(doubleval)
TranslatesadoubleintoaBigDecimal.
第二种:BigDecimal(Stringval)
TranslatestheStringrepresentationofaBigDecimalintoaBigDecimal.
使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。
publicstaticdoubleadd(doublev1,doublev2) publicstaticdoublesub(doublev1,doublev2) publicstaticdoublemul(doublev1,doublev2) publicstaticdoublediv(doublev1,doublev2) publicstaticdoublediv(doublev1,doublev2,intscale) publicstaticdoubleround(doublev,intscale)
工具类:Arith
/**
*由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入。
*/
publicclassArith{//默认除法运算精度
privatestaticfinalintDEF_DIV_SCALE=10;//这个类不能实例化
privateArith(){
}
/**
*提供精确的加法运算。
*
*@paramv1
*被加数
*@paramv2
*加数
*@return两个参数的和
*/
publicstaticdoubleadd(doublev1,doublev2){
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.add(b2).doubleValue();
}
/**
*提供精确的减法运算。
*
*@paramv1
*被减数
*@paramv2
*减数
*@return两个参数的差
*/
publicstaticdoublesub(doublev1,doublev2){
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.subtract(b2).doubleValue();
}
/**
*提供精确的乘法运算。
*
*@paramv1
*被乘数
*@paramv2
*乘数
*@return两个参数的积
*/
publicstaticdoublemul(doublev1,doublev2){
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.multiply(b2).doubleValue();
}
/**
*提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入。
*
*@paramv1
*被除数
*@paramv2
*除数
*@return两个参数的商
*/
publicstaticdoublediv(doublev1,doublev2){
returndiv(v1,v2,DEF_DIV_SCALE);
}
/**
*提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
*
*@paramv1
*被除数
*@paramv2
*除数
*@paramscale
*表示表示需要精确到小数点以后几位。
*@return两个参数的商
*/
publicstaticdoublediv(doublev1,doublev2,intscale){
if(scale<0){
thrownewIllegalArgumentException(
"Thescalemustbeapositiveintegerorzero");
}
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*提供精确的小数位四舍五入处理。
*
*@paramv需要四舍五入的数字
*@paramscale小数点后保留几位
*@return四舍五入后的结果
*/
publicstaticdoubleround(doublev,intscale){
if(scale<0){
thrownewIllegalArgumentException(
"Thescalemustbeapositiveintegerorzero");
}
BigDecimalb=newBigDecimal(Double.toString(v));
BigDecimalone=newBigDecimal("1");
returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
};
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。