<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      c#中的浮點型轉整形的舍取-四舍五入和銀行家舍入

      2012-03-06 23:14  海不是藍  閱讀(7015)  評論(9)    收藏  舉報

       

      Double顯示轉換int

       

              static void Main(string[] args)
      {
      Console.WriteLine("5.1~{0}", (int)5.1d);
      Console.WriteLine("5.5~{0}", (int)5.5d);
      Console.WriteLine("5.8~{0}", (int)5.8d);
      Console.WriteLine("2.1~{0}", (int)2.1d);
      Console.WriteLine("2.5~{0}", (int)2.5d);
      Console.WriteLine("2.8~{0}", (int)2.8d);
      Console.WriteLine("-18.2~{0}", (int)-18.2f);
      Console.WriteLine("-18.5~{0}", (int)-18.5f);
      Console.WriteLine("-18.9~{0}", (int)-18.9f);
      Console.Read();
      }


      這里可以看出浮點類型顯示轉換為整形是去除后面的小數,只取整數部分。

      MSDN上是這樣解釋的:使用顯式轉換在 C# 中執行同一轉換時,小數點右邊的值將丟失。

      這里嘗試了double和float類型,結果和上面一樣!

       

       

      難道四舍五入錯了?Convert.ToInt32


       

      static void Main(string[] args)
      {
      Console.WriteLine("5.1~{0}", Convert.ToInt32(5.1d));
      Console.WriteLine("5.5~{0}", Convert.ToInt32(5.5d));
      Console.WriteLine("5.8~{0}", Convert.ToInt32(5.8d));
      Console.WriteLine("2.1~{0}", Convert.ToInt32(2.1d));
      Console.WriteLine("2.5~{0}", Convert.ToInt32(2.5d));
      Console.WriteLine("2.8~{0}", Convert.ToInt32(2.8d));
      Console.WriteLine("-18.2~{0}", Convert.ToInt32(-18.2f));
      Console.WriteLine("-18.5~{0}", Convert.ToInt32(-18.5f));
      Console.WriteLine("-18.9~{0}", Convert.ToInt32(-18.9f));
      Console.Read();
      }



       

       

      從上面的結果發現,2.5,-18.5沒有遵守我們從小學習的四舍五入的法則!但是5.5卻正確的轉換成了6。5.1,2.8這些都是正常按照四

      舍五入的法則。

       

       

      銀行家舍入法

       


      MSDN下Convert.ToInt32方法

      public static int ToInt32(decimal value);

      public static int ToInt32(double value);

      public static int ToInt32(float value);

       

      Msdn對這些方法的返回都特殊說明了:

      舍入為最接近的 32 位有符號整數的 value。如果 value 為兩個整數中間的數字,則返回二者中的偶數;即 4.5 轉換為 4,而 5.5 轉換為 6。 

       

      查閱相關資料,得出這個舍入的規則叫銀行家舍入法:

      銀行家舍入是IEEE規定的小數舍入標準之一,也是IEEE目前規定中最優秀的舍入方法,因此所有符合 IEEE 標準的語言都應該實現這種算法,.NET平臺也不例外。

       

       

      其舍入法則是:

      一個小數,當舍去位小于5,那么就舍去這位。

       

       

      當舍去位等于5的時候,那么去看舍去位前面一位數的奇偶性,如果是奇數,那么就舍去5,然后舍去位前面一位加1,相反:如果是偶數,那么就舍去5,舍去位保留偶數性質不變。

       

       

      當舍去位大于5的時候,那么舍去位不要,舍去位前面一位加1。

       

       

      這個法則對負數也起相同作用!

       

      例子:

      4.3==4

      4.5==4

      5.5==6

      6.5==6

       

       

      NET中的銀行家舍入法實現


       

      public static int ToInt32(double value)
      {
      if (value >= 0.0)
      {
      if (value < 2147483647.5)
      {
      int num = (int)value;
      double num2 = value - num;
      if ((num2 > 0.5) || ((num2 == 0.5) && ((num & 1) != 0)))
      {
      num++;
      }
      return num;
      }
      }
      else if (value >= -2147483648.5)
      {
      int num3 = (int)value;
      double num4 = value - num3;
      if ((num4 < -0.5) || ((num4 == -0.5) && ((num3 & 1) != 0)))
      {
      num3--;
      }
      return num3;
      }
      throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
      }



      查看上面的代碼,可以從幾個地方發現復合銀行家舍入法

       

      int num = (int)value;

      double num2 = value - num;

      if ((num2 > 0.5) || ((num2 == 0.5) && ((num & 1) != 0)))

      {

         num++;

      }

      return num;

       

      分析可以發現,先是顯示把value去掉小數轉換成num,然后獲取value和num之間的小數差,再根據銀行家法則來舍去。

      ((num2 == 0.5) && ((num & 1) != 0))

      如果舍去位等于0.5,而且通過位運算得到是否是奇數,如果2個條件都符合,那么就+1。否則返回num。


      作者:海不是藍

      博客:http://www.rzrgm.cn/hailan2012/

      郵箱:hailan2012@sina.com

      本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

      主站蜘蛛池模板: 浙江省| 国产精品日日摸夜夜添夜夜添2021 | 日韩av综合中文字幕| 镇安县| 精品少妇无码一区二区三批| 色综合亚洲一区二区小说| AV最新高清无码专区| 成人拍拍拍无遮挡免费视频| 巴塘县| 国产目拍亚洲精品区一区| 东京热av无码电影一区二区| 成年女人黄小视频| 国产美女MM131爽爽爽| 日韩丝袜欧美人妻制服| 最新中文字幕国产精品| 熟女熟妇伦av网站| 国产v综合v亚洲欧美大天堂| 色 亚洲 日韩 国产 综合| 图片区小说区av区| 国产成人高清精品亚洲| 美女自卫慰黄网站| 波多野结衣久久一区二区| 无码人妻一区二区三区在线视频| 青青草成人免费自拍视频| 国产成人午夜精品影院| 亚洲中文字幕无码中字| 国内综合精品午夜久久资源| 777米奇色狠狠888俺也去乱| 亚洲国产一区二区三区最新| julia无码中文字幕一区| 丝袜美腿亚洲综合在线观看视频| 亚洲天堂精品一区二区| 亚洲av无码之国产精品网址蜜芽| 国产精品一线天在线播放| 两个人日本www免费版| 日本一卡2卡3卡4卡无卡免费| 99久久久无码国产精品动漫| 欧洲一区二区中文字幕| 日本A级视频在线播放| 女人香蕉久久毛毛片精品| 国产精品久久蜜臀av|