Java使用BigDecimal精确运算浮点数
/** *进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 * *@authorMarydon *@createTime2017年12月1日上午11:39:15 *@updateTime *@Email:Marydon20170307@163.com *@description由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供了精确的浮点数运算,包括加减乘除和四舍五入。 *@version:1.0.0 */ publicclassArithmeticUtiles{ /** *进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 * *@authorwupenghui由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入。 */ //默认除法运算精度 privatestaticfinalintDEF_DIV_SCALE=10; //这个类不能实例化 privateArithmeticUtiles(){ } /** *提供精确的加法运算 * *@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(); } /** *提供精确的类型转换(Float) * *@paramv *需要被转换的数字 *@return返回转换结果 */ publicstaticfloatconvertsToFloat(doublev){ BigDecimalb=newBigDecimal(v); returnb.floatValue(); } /** *提供精确的类型转换(Int)不进行四舍五入 * *@paramv *需要被转换的数字 *@return返回转换结果 */ publicstaticintconvertsToInt(doublev){ BigDecimalb=newBigDecimal(v); returnb.intValue(); } /** *提供精确的类型转换(Long) * *@paramv *需要被转换的数字 *@return返回转换结果 */ publicstaticlongconvertsToLong(doublev){ BigDecimalb=newBigDecimal(v); returnb.longValue(); } /** *返回两个数中大的一个值 * *@paramv1 *需要被对比的第一个数 *@paramv2 *需要被对比的第二个数 *@return返回两个数中大的一个值 */ publicstaticdoublereturnMax(doublev1,doublev2){ BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.max(b2).doubleValue(); } /** *返回两个数中小的一个值 * *@paramv1 *需要被对比的第一个数 *@paramv2 *需要被对比的第二个数 *@return返回两个数中小的一个值 */ publicstaticdoublereturnMin(doublev1,doublev2){ BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.min(b2).doubleValue(); } /** *精确对比两个数字 * *@paramv1 *需要被对比的第一个数 *@paramv2 *需要被对比的第二个数 * *@return如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1 */ publicstaticintcompareTo(doublev1,doublev2){ BigDecimalb1=newBigDecimal(v1); BigDecimalb2=newBigDecimal(v2); returnb1.compareTo(b2); } }
以上就是Java使用BigDecimal精确运算浮点数的详细内容,更多关于Java精确运算浮点数的资料请关注毛票票其它相关文章!