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

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

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

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    有時在項目開發過程中,對數值的精度要求較高時可能就會用到java.math.BigDecimal,使用時發現有些用法效率較低。
    1:初始化一個java.math.BigDecimal時盡量用java.math.BigDecimal.valueOf(0)來替代new java.math.BigDecimal().
    2:比較兩個java.math.BigDecimal對象時,最好用equals(),而不要進行數值轉換,如:doubleValue等,測試發現凡涉及到類型轉換,性能都要受到較大影響。
    下面是自己寫的一段測試代碼:
    import java.math.BigDecimal;

    public class TestClass {
    ? public TestClass() {
    ? }
    ? public static void main(String[] args){
    ??? StringBuffer test = new StringBuffer();
    ??? BigDecimal tempBig = null;
    ??? long time1 = System.currentTimeMillis();
    ??? for(int i=0;i<200000;i++){
    ????? tempBig = new BigDecimal(0);
    ????? tempBig = null;
    ??? }
    ??? long time2 = System.currentTimeMillis();
    ??? System.out.println("===="+(time2-time1)+"=======");
    ??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
    ??? long time3 = System.currentTimeMillis();
    ??? for(int i=0;i<200000;i++){
    ????? tempBig = BigDecimal.valueOf(0);
    ????? tempBig = null;
    ??? }
    ??? long time4 = System.currentTimeMillis();
    ??? System.out.println("===="+(time4-time3)+"=======");
    ??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
    ??? tempBig = BigDecimal.valueOf(0);
    ??? BigDecimal ddd = new BigDecimal(1);
    ??? long time5 = System.currentTimeMillis();
    ??? for(int i=0;i<200000;i++){
    ????? if(tempBig.equals(ddd)){
    ????? }
    ??? }
    ??? long time6 = System.currentTimeMillis();
    ??? System.out.println("===="+(time6-time5)+"=======");
    ??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
    ??? long time7 = System.currentTimeMillis();
    ??? for(int i=0;i<200000;i++){
    ????? if(tempBig.doubleValue()==0){
    ????? }
    ??? }
    ??? long time8 = System.currentTimeMillis();
    ??? System.out.println("===="+(time8-time7)+"=======");
    ??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
    ? }
    }

    posted on 2006-09-25 14:11 TrampEagle 閱讀(5820) 評論(4)  編輯  收藏 所屬分類: 學習體會

    Feedback

    # re: 使用BigDecimal時提高系統性能的一些優化 2006-10-21 21:39 wmuu
    BigDeciaml.ZREO
    equals()實際上不好用應該多個精度的參數.
    原來認為bigDeciaml的實現會有些像bcd1248碼,結果不是.說是BigDecimal,結果確不是準確的Decimal還是近似的  回復  更多評論
      

    # re: 使用BigDecimal時提高系統性能的一些優化 2006-10-21 22:15 wmuu
    有看了一下發現說錯了,bigDecimal準確的十進制
    是以前new decimal的時候用了double  回復  更多評論
      

    # re: 使用BigDecimal時提高系統性能的一些優化 2006-12-20 20:58 hhq
    ====使用new 初始化 2000000 次===
    ====90=======
    =============================
    ====使用valueOf 初始化2000000 次===
    ====40=======
    =====================
    ====使用equals 判斷2000000 次===
    ====50=======
    ===============================
    ====使用doubleValue 判斷2000000 次===
    ====50=======
    ===============================


    IBM T41上的表現,差異非常有限,沒有什么意思  回復  更多評論
      

    # re: 使用BigDecimal時提高系統性能的一些優化 2007-11-23 16:25 5
    我仔使用的時候
    用如下代碼
    BigDecimal a=BigDecimal.valueOf(8.209);
    BigDecimal c=BigDecimal.valueOf(9.40).multiply(a);
    double d=c.doubleValue();

    在不同的機子上得到不同的精度值 77.1646 和77.16460000000001
    不知道是咋回事 代碼一摸一樣  回復  更多評論
      

    主站蜘蛛池模板: 久久综合亚洲色HEZYO国产| 久久成人国产精品免费软件| 免费激情视频网站| 亚洲女子高潮不断爆白浆| 最新免费jlzzjlzz在线播放| 亚洲一卡二卡三卡| 女性自慰aⅴ片高清免费| 亚洲午夜精品一区二区麻豆| 暖暖免费高清日本一区二区三区| 99久久国产亚洲综合精品| 成全视频在线观看免费高清动漫视频下载| 亚洲AV成人影视在线观看| 午夜私人影院免费体验区| 亚洲a∨国产av综合av下载| 国产免费卡一卡三卡乱码| 一级做a爱片特黄在线观看免费看| 亚洲精品国自产拍在线观看| 一级毛片无遮挡免费全部| 亚洲人成色777777在线观看| 四虎影视成人永久免费观看视频| 亚洲精品中文字幕乱码影院| 一二三四在线播放免费观看中文版视频 | ZZIJZZIJ亚洲日本少妇JIZJIZ| 9久热这里只有精品免费| 亚洲爱情岛论坛永久| 69成人免费视频无码专区| 国产午夜亚洲精品不卡| 久久亚洲国产午夜精品理论片| 三年片在线观看免费观看大全一 | 亚洲AⅤ视频一区二区三区| 国产亚洲精品免费视频播放| 亚洲色图在线观看| 永久黄网站色视频免费| 中文字幕免费在线观看动作大片| 中文字幕亚洲综合久久| 日本特黄特色免费大片| 免费毛片在线看不用播放器| 亚洲精品人成网在线播放影院| 亚洲无码视频在线| 四虎永久在线观看免费网站网址| 精品女同一区二区三区免费播放 |