隨筆 - 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標準規(guī)定的一種“to even”的四舍五入的方法,即:
          該方法在省略數(shù)據(jù)只有一個5的情況下,需要看前面一位。若為偶數(shù)則省略,若為奇數(shù)則進位,也就是偶數(shù)優(yōu)先。

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

            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.22,3.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


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

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

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

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 青神县| 贺兰县| 东城区| 泗洪县| 琼结县| 黄骅市| 菏泽市| 安丘市| 子长县| 阳城县| 霞浦县| 锡林浩特市| 霸州市| 抚远县| 诸城市| 嘉定区| 正宁县| 定边县| 开原市| 临猗县| 和田县| 玉门市| 宿迁市| 荃湾区| 内乡县| 天台县| 砀山县| 新邵县| 东光县| 广安市| 泊头市| 肇庆市| 广西| 庆云县| 东兰县| 兰溪市| 瑞安市| 高要市| 松桃| 加查县| 安庆市|