明天的明天的明天

          用鍵盤改變生活

            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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 海阳市| 衡南县| 靖宇县| 防城港市| 辽阳市| 吉木萨尔县| 招远市| 株洲县| 建瓯市| 邹平县| 启东市| 闻喜县| 谢通门县| 琼海市| 蓝山县| 卫辉市| 穆棱市| 玛曲县| 内乡县| 洛浦县| 双桥区| 大安市| 古浪县| 浦东新区| 贞丰县| 青浦区| 郎溪县| 永靖县| 巴彦县| 屏山县| 德昌县| 黄陵县| 麻江县| 环江| 甘德县| 介休市| 故城县| 玉田县| 乌鲁木齐市| 公主岭市| 石林|