<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    當您在計算Money的時候,請看好了?。?!要不損失了別后悔!??!

    現(xiàn)象1

        public static void main(String[] args) {

           System.out.println(0.030*100);//輸出3.0

           System.out.println(0.031*100);//輸出3.1

           System.out.println(0.032*100);//輸出3.2

           System.out.println(0.033*100);//輸出3.3000000000000003

           System.out.println(0.034*100);//輸出3.4000000000000004

           System.out.println(0.035*100);//輸出3.5000000000000004

           System.out.println(0.036*100);//輸出3.5999999999999996

           System.out.println(0.037*100);//輸出3.6999999999999997

           System.out.println(0.038*100);//輸出3.8

           System.out.println(0.039*100);//輸出3.9

        }

    現(xiàn)象2

        public static void main(String[] args) {

           BigDecimal b1 = new BigDecimal("0.236");

           BigDecimal b2 = new BigDecimal(0.236);

           System.out.println(b1);//輸出0.236

           System.out.println(b2);//輸出0.2359999999999999875655021241982467472553253173828125

    }

    描述:

    當我們使用一些“特殊的數(shù)字”進行運算時,或者調(diào)用BigDecimalnew BigDecimal(double val)進行構(gòu)造的時候,將得到意想不到的結(jié)果。

    原因:

    Java中,浮點類型是依據(jù)IEEE754標準的。IEEE754定義了32位和64位雙精度兩種浮點二進制小數(shù)標準。采用二進制表示double,float等浮點數(shù)是不準確的。

    同時BigDecimalAPI聲明,建議使用new BigDecimal(String val)進行構(gòu)造,使用new BigDecimal(double val)進行構(gòu)造的時候,將得到意想不到的結(jié)果(The results of this constructor can be somewhat unpredictable)。

    解決辦法(以0.236*100 = 23.599999999999998為例)

    1、 通過String結(jié)合BigDecimal來轉(zhuǎn)換。

           String val = "0.236";

           //使用new BigDecimal(String val)進行構(gòu)造

           BigDecimal a = new BigDecimal(""+val);

           BigDecimal b = new BigDecimal(""+100);

           //小數(shù)的位數(shù)與構(gòu)造參數(shù)的位數(shù)一致

           System.out.println(a.multiply(b));//輸出23.600

    2、  通過移位結(jié)合BigDecimal來轉(zhuǎn)換

           String val = "0.236";

           //使用new BigDecimal(String val)進行構(gòu)造

           BigDecimal a = new BigDecimal(""+val);

           //向右移兩位

           a = a.movePointRight(2);

           System.out.println(a);//輸出23.6

    3、  使用保留小數(shù)位的方法來轉(zhuǎn)換

           double result = 0.236*100;

           System.out.println(result);//輸出23.599999999999998

           //計算保留result小數(shù)點后四位,以此類推,1后面幾個零就是保留小數(shù)點后幾位數(shù).如下保留兩位小數(shù)

           result = (double)(Math.round(result*100)/100.0) ;

           System.out.println(result);//輸出23.6

    4、 使用DecimalFormat來確定小數(shù)點后位數(shù)

           double val = 0.236*100;

           //保留小數(shù)點后兩位,若保留三位為"#.000"

           DecimalFormat df = new DecimalFormat("#.00");

           String str = df.format(val);

           System.out.println(Double.valueOf(str));//輸出23.6

    5、-----方法很多,一個即可

    心得:

    處理這樣的精度問題方法很多,只要不是直接采用浮點數(shù)進行計算就行。

    附加:

    IEEE 754用科學記數(shù)法以底數(shù)為2的小數(shù)來表示浮點數(shù)。32位浮點數(shù)用1位表示數(shù)字的符號,用8位來表示指數(shù),用23位來表示尾數(shù),即小數(shù)部分。作為有符號整數(shù)的指數(shù)可以有正負之分。小數(shù)部分用二進制(底數(shù)2)小數(shù)來表示。對于64位雙精度浮點數(shù),用1位表示數(shù)字的符號,用11位表示指數(shù),52位表示尾數(shù)。如下兩個圖來表示:

    float(32):

    1位,符號位

    冪(8位)

    尾數(shù)(32位)

    double(64):

    1位,符號位

    冪(11位)

    尾數(shù)(52位)

    都是分為三個部分:

    (1)一個單獨的符號位s直接編碼符號s。

    (2)k位的冪指數(shù)E,移碼表示。

    (3)n位的小數(shù),原碼表示
    posted on 2010-10-26 12:04 墻頭草 閱讀(3711) 評論(0)  編輯  收藏

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


    網(wǎng)站導航:
     
    人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運專家
    主站蜘蛛池模板: 亚洲国产综合无码一区二区二三区| a色毛片免费视频| 一二三四视频在线观看中文版免费| 亚洲成a人片在线观看无码| a级毛片免费在线观看| 亚洲欧洲国产精品香蕉网| XXX2高清在线观看免费视频| 亚洲三区在线观看无套内射| 最近免费中文字幕中文高清| 亚洲精品tv久久久久久久久| 免费在线看污视频| 亚洲首页在线观看| 4虎永免费最新永久免费地址| 亚洲av乱码一区二区三区| 国产精品成人免费视频网站京东| 亚洲国产日韩精品| 国产一卡二卡≡卡四卡免费乱码| 鲁啊鲁在线视频免费播放| 亚洲欧洲日本在线| 久热免费在线视频| 亚洲1区1区3区4区产品乱码芒果| 在线播放免费播放av片| 美女被免费视频网站| 亚洲精品高清国产一线久久| 日本在线看片免费人成视频1000| 亚洲另类古典武侠| 国产91久久久久久久免费| 99久久免费国产精品热| 亚洲日韩国产精品无码av| 国产精品无码一二区免费 | 9久久免费国产精品特黄| 亚洲AV日韩AV永久无码下载| 67194熟妇在线永久免费观看| 女bbbbxxxx另类亚洲| 国产成人精品日本亚洲| 国拍在线精品视频免费观看| 美女视频免费看一区二区| 亚洲国产人成网站在线电影动漫| 成人AV免费网址在线观看| 国产免费人成视频尤勿视频| 亚洲国产高清美女在线观看|