菠萝三国

大江东去,浪淘尽...
随笔 - 34, 文章 - 47, 评论 - 22, 引用 - 0
数据加载中……

java实现精确的"四舍五入"


importjava.math.BigDecimal;
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();

   }


}

posted on 2007-08-06 21:33 菠萝 阅读(272) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: