隨筆-31  評論-7  文章-0  trackbacks-0

          package lc.util;

          import java.math.BigDecimal;

          public class MathHelper {
           private static final int DEF_DIV_SCALE = 10;

           private MathHelper() {

           }

           /**
            * 提供精確的加法運算。
            *
            * @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();
           }
          }



          --------------------------
          09博客園紀念T恤
          新聞:王建宙臺灣布道TD:痛快,一起努力的感覺
          網站導航: 博客園首頁  個人主頁  新聞  社區  博問  閃存  找找看
          文章來源:http://www.cnblogs.com/xiaoao808/archive/2009/05/20/1469589.html
          posted on 2009-05-20 17:13 破名超難起 閱讀(313) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 乌拉特前旗| 衡阳市| 略阳县| 东乌珠穆沁旗| 灵璧县| 高碑店市| 民乐县| 新兴县| 芦山县| 东安县| 兰州市| 迁西县| 宁阳县| 增城市| 高邮市| 曲沃县| 永和县| 洛川县| 巴塘县| 沂南县| 晋州市| 聂荣县| 海伦市| 阳高县| 西吉县| 洞口县| 福海县| 水富县| 杭锦后旗| 革吉县| 吉水县| 蓬溪县| 新巴尔虎左旗| 乡城县| 黑山县| 梨树县| 双辽市| 林甸县| 徐闻县| 阳谷县| 潢川县|