明天的明天的明天

          用鍵盤改變生活

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks
          /*
           * 創建日期 2004-10-14
           *
           * 如果需要精確計算,非要用String來夠造BigDecimal不可
           */
          package com.lims.actions.testqc.comm;

          /**
           * @author Jstar
           *
           *
           * 窗口 > 首選項 > 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();

           }

          };

          posted on 2007-09-17 13:01 Endless 閱讀(515) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 琼海市| 北碚区| 临西县| 贵南县| 威远县| 台东县| 伊吾县| 盐城市| 阜新市| 泾阳县| 娄底市| 慈溪市| 陵川县| 晋宁县| 南昌县| 平安县| 淮阳县| 邢台县| 永康市| 康乐县| 科技| 台前县| 会泽县| 和顺县| 德清县| 秭归县| 吉木萨尔县| 米脂县| 台东市| 香港 | 大冶市| 商水县| 西吉县| 邯郸市| 清徐县| 云林县| 盐源县| 合川市| 江阴市| 航空| 长沙市|