熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

Java簡單類型進行精確浮點數運算

2013-11-23 17:58:29  來源: Javascript 

  由於Java的簡單類型不能夠精確的對浮點數進行運算這個工具類提供精確的浮點數運算包括加減乘除和四捨五入
  
  以下為代碼
  
   import javamathBigDecimal;
  
  public class Arith {
   //默認除法運算精度
   private static final int DEF_DIV_SCALE = ;
  
   //這個類不能實例化
   private Arith(){
   }
  
   /**
    * 提供精確的加法運算
    * @param v 被加數
    * @param v 加數
    * @return 兩個參數的和
    */
   public static double add(double vdouble v){
    BigDecimal b = new BigDecimal(DoubletoString(v));
    BigDecimal b = new BigDecimal(DoubletoString(v));
    return badd(b)doubleValue();
   }
  
   /**
    * 提供精確的減法運算
    * @param v 被減數
    * @param v 減數
    * @return 兩個參數的差
    */
   public static double sub(double vdouble v){
    BigDecimal b = new BigDecimal(DoubletoString(v));
    BigDecimal b = new BigDecimal(DoubletoString(v));
    return bsubtract(b)doubleValue();
   }
  
   /**
    * 提供精確的乘法運算
    * @param v 被乘數
    * @param v 乘數
    * @return 兩個參數的積
    */
  
  public static double mul(double vdouble v){
    BigDecimal b = new BigDecimal(DoubletoString(v));
    BigDecimal b = new BigDecimal(DoubletoString(v));
    return bmultiply(b)doubleValue();
   }
  
   /**
    * 提供(相對)精確的除法運算當發生除不盡的情況時精確到
    * 小數點以後以後的數字四捨五入
    * @param v 被除數
    * @param v 除數
    * @return 兩個參數的商
    */
   public static double div(double vdouble v){
    return div(vvDEF_DIV_SCALE);
   }
  
   /**
    * 提供(相對)精確的除法運算當發生除不盡的情況時由scale參數指
    * 定精度以後的數字四捨五入
    * @param v 被除數
    * @param v 除數
    * @param scale 表示表示需要精確到小數點以後幾位
    * @return 兩個參數的商
    */
   public static double div(double vdouble vint scale){
    if(scale< ){
     throw new IllegalArgumentException(
     The scale must be a positive integer or zero);
    }
    BigDecimal b = new BigDecimal(DoubletoString(v));
    BigDecimal b = new BigDecimal(DoubletoString(v));
    return bdivide(bscaleBigDecimalROUND_HALF_UP)doubleValue();
   }
  
   /**
    * 提供精確的小數位四捨五入處理
    * @param v 需要四捨五入的數字
    * @param scale 小數點後保留幾位
    * @return 四捨五入後的結果
    */
   public static double round(double vint scale){
    if(scale< ){
     throw new IllegalArgumentException(
     The scale must be a positive integer or zero);
    }
    BigDecimal b = new BigDecimal(DoubletoString(v));
    BigDecimal one = new BigDecimal();
    return bdivide(onescaleBigDecimalROUND_HALF_UP)doubleValue();
   }
  }
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25460.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.