Thking In Java

          關(guān)注應(yīng)用程序的HA、可擴展性 多實踐,遇到問題查doc,google,上論壇咨詢

           

          [導(dǎo)入]【轉(zhuǎn)載】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 四舍五入后的結(jié)果

          */

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

          }

          };


          文章來源:http://huxiaofei590.blog.163.com/blog/static/32596122007584283491

          posted on 2007-06-08 16:29 ThinkInJava 閱讀(116) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          java

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 闻喜县| 鞍山市| 象州县| 康保县| 玉溪市| 资阳市| 塘沽区| 兴城市| 吉水县| 潍坊市| 枣庄市| 三明市| 临清市| 阿城市| 昌平区| 东乡| 石河子市| 马公市| 威信县| 涡阳县| 阿拉善盟| 西吉县| 嘉峪关市| 四川省| 宣武区| 新田县| 阳高县| 宁乡县| 金坛市| 福海县| 如皋市| 晴隆县| 天祝| 石城县| 通城县| 岐山县| 阜新市| 无为县| 上虞市| 平邑县| 汶川县|