Thking In Java

          關注應用程序的HA、可擴展性 多實踐,遇到問題查doc,google,上論壇咨詢

           

          [導入]【轉載】JAVA中精確計算

          import java.math.BigDecimal;

           

          /**

          * 由于Java的簡單類型不能夠精確的對浮點數進行運算,這個工具類提供精

          * 確的浮點數運算,包括加減乘除和四舍五入。

          */

          public class Arith{

           

          //默認除法運算精度

          private static final int DEF_DIV_SCALE = 10;

           

          //這個類不能實例化

          private Arith(){

          }

           

           

          /**

          * 提供精確的加法運算。

          * @param v1 被加數

          * @param v2 加數

          * @return 兩個參數的和

          */

          public static double add(double v1,double v2){

          BigDecimal b1 = new BigDecimal(Double.toString(v1));

          BigDecimal b2 = new BigDecimal(Double.toString(v2));

          return b1.add(b2).doubleValue();

          }

           

          /**

          * 提供精確的減法運算。

          * @param v1 被減數

          * @param v2 減數

          * @return 兩個參數的差

          */

          public static double sub(double v1,double v2){

          BigDecimal b1 = new BigDecimal(Double.toString(v1));

          BigDecimal b2 = new BigDecimal(Double.toString(v2));

          return b1.subtract(b2).doubleValue();

          }

           

          /**

          * 提供精確的乘法運算。

          * @param v1 被乘數

          * @param v2 乘數

          * @return 兩個參數的積

          */

          public static double mul(double v1,double v2){

          BigDecimal b1 = new BigDecimal(Double.toString(v1));

          BigDecimal b2 = new BigDecimal(Double.toString(v2));

          return b1.multiply(b2).doubleValue();

          }

           

          /**

          * 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到

          * 小數點以后10位,以后的數字四舍五入。

          * @param v1 被除數

          * @param v2 除數

          * @return 兩個參數的商

          */

          public static double div(double v1,double v2){

          return div(v1,v2,DEF_DIV_SCALE);

          }

           

          /**

          * 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指

          * 定精度,以后的數字四舍五入。

          * @param v1 被除數

          * @param v2 除數

          * @param scale 表示表示需要精確到小數點以后幾位。

          * @return 兩個參數的商

          */

          public static double div(double v1,double v2,int scale){

          if(scale<0){

          throw new IllegalArgumentException(

          "The scale must be a positive integer or zero");

          }

          BigDecimal b1 = new BigDecimal(Double.toString(v1));

          BigDecimal b2 = new BigDecimal(Double.toString(v2));

          return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

          }

           

          /**

          * 提供精確的小數位四舍五入處理。

          * @param v 需要四舍五入的數字

          * @param scale 小數點后保留幾位

          * @return 四舍五入后的結果

          */

          public static double round(double v,int scale){

          if(scale<0){

          throw new IllegalArgumentException(

          "The scale must be a positive integer or zero");

          }

          BigDecimal b = new BigDecimal(Double.toString(v));

          BigDecimal one = new BigDecimal("1");

          return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

          }

          };


          文章來源:http://huxiaofei590.blog.163.com/blog/static/32596122007584283491

          posted on 2007-06-08 16:29 ThinkInJava 閱讀(116) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          java

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 阜阳市| 靖宇县| 黔南| 钟祥市| 乐清市| 隆尧县| 濮阳县| 会宁县| 卫辉市| 米林县| 商洛市| 米脂县| 昆山市| 株洲市| 南康市| 义乌市| 澜沧| 岳普湖县| 马鞍山市| 长春市| 静乐县| 黄龙县| 彭山县| 日照市| 太保市| 民权县| 耒阳市| 赤峰市| 韶山市| 和林格尔县| 罗甸县| 固镇县| 阳东县| 武功县| 宜丰县| 广南县| 江安县| 尉犁县| 北京市| 阿尔山市| 平顶山市|