程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 關於C# Math 處理奇進偶不進,

關於C# Math 處理奇進偶不進,

編輯:關於C語言

關於C# Math 處理奇進偶不進,


    話說,最近一次系統維護 用JS讀取導入Excel中的實驗數據,出現被自動四捨五入。後來到客戶現場聽客戶反饋  Excel實驗數據要求 奇進偶不進。

           關於 奇進偶不進 產生的由來:從統計學的角度,“奇進偶捨”比“四捨五入”要科學,在大量運算時,它使捨入後的結果誤差的均值趨於零,而不是像四捨五入那樣逢五就入,導致結果偏向大數,使得誤差產生積累進而產生系統誤差,“奇進偶捨”使測量結果受到捨入誤差的影響降到最低。

           Math下找了下,使用Round 的重載,使用 MidpointRounding.ToEven 就可以實現 奇進偶不進。 

            // 4
            double d = 5.214;
            double res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//5.21

            //6
            d = 5.216;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//5.22

            //5
            d = 5.215;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//5.22
            d = 5.225;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//5.22




            //不止小數點後3位時
            d = 0.7865666;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//0.79

            d = 0.786;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//0.79

            d = 0.785;
            res = Math.Round(d, 2, MidpointRounding.ToEven);
            Console.WriteLine(res);//0.78

 

        

 

         

          

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved