明天的明天的明天

          用鍵盤改變生活

            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 閱讀(520) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 乌兰浩特市| 邯郸市| 黄骅市| 洛隆县| 玛纳斯县| 会东县| 林甸县| 新源县| 赤壁市| 广灵县| 肇东市| 海南省| 丹寨县| 林周县| 芷江| 运城市| 长宁区| 金山区| 宁城县| 二连浩特市| 顺平县| 且末县| 钟山县| 民权县| 永泰县| 灵石县| 永清县| 紫金县| 莱阳市| 乌鲁木齐市| 噶尔县| 左权县| 翁源县| 朝阳区| 莱州市| 临颍县| 丰镇市| 葫芦岛市| 阳朔县| 仲巴县| 宕昌县|