隨筆 - 4  文章 - 13  trackbacks - 0
          <2008年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          先看下如下代碼:
          double dTest=82.545d;
                DecimalFormat format=new DecimalFormat("0.00");
                System.out.println(format.format(dTest));

          你覺得會輸出什么?82.55?還是82.54?


          再試下這段代碼:
          double dTest=82.535d;
                DecimalFormat format=new DecimalFormat("0.00");
                System.out.println(format.format(dTest));
          你覺得會輸出什么?82.53?還是82.54?

          先別猜,自己運行下……

          或者有人認為這是DecimalFormat的一個BUG?
          不是的,這其實是IEEE754標準規定的一種“to even”的四舍五入的方法,即:
          該方法在省略數據只有一個5的情況下,需要看前面一位。若為偶數則省略,若為奇數則進位,也就是偶數優先。

          IEEE754規定了如下的幾種四舍五入的標準,分別舉例說明其意義:
           

            away from zero             例:3.215 > 3.22-3.215 > -3.22

          towards zero               例:3.215 > 3.21-3.215 > -3.21

             to even                    例:3.215 > 3.223.245 > 3.24

          towards positive infinity      例:3.215 > 3.22-3.215 > -3.21

           towards negative infinity      例:3.215 > 3.21-3.215 > -3.22


          我們常規意義上的“四舍五入”是“away from zero”的方式。
          posted on 2008-11-17 16:50 foxinsky 閱讀(2235) 評論(2)  編輯  收藏

          FeedBack:
          # re: IEEE754標準規定的五種四舍五入方法 2008-11-19 14:29 paul xu
          既然這樣,那lz何不給出對應的java處理方法  回復  更多評論
            
          # re: IEEE754標準規定的五種四舍五入方法 2008-11-19 15:58 foxinsky
          @paul xu
          方法很簡單,在被格式化的數據上加一個很小很小的正數即可
          double dTest=82.545d;
          DecimalFormat format=new DecimalFormat("0.00");
          System.out.println(format.format(dTest+0.00000001));

          輸出結果就是傳統意義上的四舍五入了
            回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 军事| 海城市| 获嘉县| 宜宾市| 嘉峪关市| 玛曲县| 谷城县| 邳州市| 镇赉县| 盐亭县| 游戏| 高邮市| 开原市| 天台县| 南平市| 永修县| 汾阳市| 安平县| 龙胜| 桐梓县| 应城市| 长子县| 岑巩县| 淮北市| 囊谦县| 山东省| 泾源县| 广饶县| 独山县| 长治市| 昌乐县| 榕江县| 报价| 长春市| 通城县| 沂南县| 建始县| 云阳县| 桐梓县| 万山特区| 麟游县|