明天的明天的明天

          用鍵盤改變生活

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

          /**
           * @author Jstar
           *
           *
           * 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
           */

          import java.math.BigDecimal;

          /**
          * 由于Java的簡單類型不能夠精確的對浮點數(shù)進行運算,這個工具類提供精
          * 確的浮點數(shù)運算,包括加減乘除和四舍五入。
          */

          public class Arith {

           //默認除法運算精度

           private static final int DEF_DIV_SCALE = 10;

           //這個類不能實例化

           private Arith() {

           }

           /**
           
            * 提供精確的加法運算。
           
            * @param v1 被加數(shù)
           
            * @param v2 加數(shù)
           
            * @return 兩個參數(shù)的和
           
            */

           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 被減數(shù)
            * @param v2 減數(shù)
            * @return 兩個參數(shù)的差
            */

           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 被乘數(shù)
           
            * @param v2 乘數(shù)
           
            * @return 兩個參數(shù)的積
           
            */

           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();

           }

           /**
           
            * 提供(相對)精確的除法運算,當發(fā)生除不盡的情況時,精確到
           
            * 小數(shù)點以后10位,以后的數(shù)字四舍五入。
           
            * @param v1 被除數(shù)
           
            * @param v2 除數(shù)
           
            * @return 兩個參數(shù)的商
           
            */

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

            return div(v1, v2, DEF_DIV_SCALE);

           }

           /**
           
            * 提供(相對)精確的除法運算。當發(fā)生除不盡的情況時,由scale參數(shù)指
           
            * 定精度,以后的數(shù)字四舍五入。
           
            * @param v1 被除數(shù)
           
            * @param v2 除數(shù)
           
            * @param scale 表示表示需要精確到小數(shù)點以后幾位。
           
            * @return 兩個參數(shù)的商
           
            */

           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();

           }

           /**
           
            * 提供精確的小數(shù)位四舍五入處理。
           
            * @param v 需要四舍五入的數(shù)字
           
            * @param scale 小數(shù)點后保留幾位
           
            * @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 閱讀(520) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 旬阳县| 玛沁县| 榆社县| 普兰县| 宁乡县| 玉林市| 介休市| 建德市| 红桥区| 邢台县| 洪湖市| 达孜县| 综艺| 潢川县| 沙湾县| 慈溪市| 玉山县| 曲麻莱县| 定边县| 昂仁县| 玉田县| 乌鲁木齐市| 旬阳县| 峨眉山市| 班玛县| 金阳县| 抚松县| 托克逊县| 虞城县| 克什克腾旗| 海林市| 皋兰县| 铁岭市| 建瓯市| 吐鲁番市| 云和县| 新竹市| 晋中市| 连城县| 绩溪县| 西平县|