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

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

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

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    java處理浮點(diǎn)數(shù)

    Posted on 2010-07-27 18:22 leekiang 閱讀(1298) 評(píng)論(0)  編輯  收藏 所屬分類: java
    ??? public void testBigDecimalEquals() {
    ?? ???? assertEquals(new BigDecimal("3.50"),new BigDecimal("3.5"));//不相等
    ?? ?}

    ?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
    ?
    ?BigDecimal b2 = new BigDecimal(0.236);
    ?System.out.println(b2);//輸出0.2359999999999999875655021241982467472553253173828125
    ?
    ?描述:
    ?當(dāng)我們使用一些"特殊的數(shù)字"進(jìn)行運(yùn)算時(shí),或者調(diào)用BigDecimal中new BigDecimal(double val)進(jìn)行構(gòu)造的時(shí)候,將得到意想不到的結(jié)果。
    ?原因:
    ?Java中,浮點(diǎn)類型是依據(jù)IEEE754標(biāo)準(zhǔn)的。IEEE754定義了32位和64位雙精度兩種浮點(diǎn)二進(jìn)制小數(shù)標(biāo)準(zhǔn)。采用二進(jìn)制表示double,float等浮點(diǎn)數(shù)是不準(zhǔn)確的。
    同時(shí)BigDecimal的API聲明,建議使用new BigDecimal(String val)進(jìn)行構(gòu)造,使用new BigDecimal(double val)進(jìn)行構(gòu)造的時(shí)候,將得到意想不到的結(jié)果(The results of this constructor can be somewhat unpredictable)。

    解決辦法:
    1,通過String結(jié)合BigDecimal來轉(zhuǎn)換。
    String val = "0.236";
    //使用new BigDecimal(String val)進(jìn)行構(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,使用DecimalFormat來確定小數(shù)點(diǎn)后位數(shù)
    double val = 0.236*100;
    //保留小數(shù)點(diǎn)后兩位,若保留三位為"#.000"
    DecimalFormat df = new DecimalFormat("#.00");
    String str = df.format(val);
    System.out.println(Double.valueOf(str));//輸出23.6

    感謝
    http://www.tkk7.com/kalman03/archive/2010/10/25/336121.html
    主站蜘蛛池模板: 91亚洲一区二区在线观看不卡| 四色在线精品免费观看| 国产一级淫片a免费播放口| 好吊色永久免费视频大全| 午夜免费国产体验区免费的| 美女被免费视频网站a| 特级一级毛片免费看| 七次郎成人免费线路视频| 日韩精品无码免费视频| 一区二区3区免费视频| 波霸在线精品视频免费观看| a级特黄毛片免费观看| 在线观看免费播放av片| 131美女爱做免费毛片| 亚洲成人免费电影| 91免费精品国自产拍在线不卡| 久久久久免费看黄A片APP| 真实乱视频国产免费观看 | 午夜亚洲WWW湿好爽| 免费视频精品一区二区| 国产裸体美女永久免费无遮挡| 中文字幕无线码中文字幕免费| 久久午夜无码免费| 国产在线观看片a免费观看| 国产网站在线免费观看| 亚洲日本一区二区三区在线不卡| 亚洲综合色婷婷七月丁香| 亚洲精品人成在线观看| 国产精品亚洲片在线va| 国产青草亚洲香蕉精品久久 | 老汉色老汉首页a亚洲| 亚洲无圣光一区二区| 亚洲欧美一区二区三区日产| 美女黄频a美女大全免费皮| 99在线免费视频| 免费福利网站在线观看| 免费一看一级毛片人| 亚洲精品无码久久久影院相关影片| 亚洲第一中文字幕| 亚洲人成人伊人成综合网无码| 一级**爱片免费视频|