欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#中的浮點型轉整形的舍取 四舍五入和銀行家舍入實現(xiàn)代碼

 更新時間:2012年03月06日 23:46:39   作者:  
c#中的浮點型轉整形的舍取 四舍五入和銀行家舍入實現(xiàn)代碼,學習c#的朋友可以參考下
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();
}


這里可以看出浮點類型顯示轉換為整形是去除后面的小數(shù),只取整數(shù)部分。
MSDN上是這樣解釋的:使用顯式轉換在 C# 中執(zhí)行同一轉換時,小數(shù)點右邊的值將丟失。
這里嘗試了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();
}

從上面的結果發(fā)現(xiàn),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 位有符號整數(shù)的 value。如果 value 為兩個整數(shù)中間的數(shù)字,則返回二者中的偶數(shù);即 4.5 轉換為 4,而 5.5 轉換為 6。
查閱相關資料,得出這個舍入的規(guī)則叫銀行家舍入法:
銀行家舍入是IEEE規(guī)定的小數(shù)舍入標準之一,也是IEEE目前規(guī)定中最優(yōu)秀的舍入方法,因此所有符合 IEEE 標準的語言都應該實現(xiàn)這種算法,.NET平臺也不例外。

其舍入法則是:
一個小數(shù),當舍去位小于5,那么就舍去這位。

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

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

這個法則對負數(shù)也起相同作用!
例子:
4.3==4
4.5==4
5.5==6
6.5==6

NET中的銀行家舍入法實現(xiàn)
復制代碼 代碼如下:

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"));
}

查看上面的代碼,可以從幾個地方發(fā)現(xiàn)復合銀行家舍入法
復制代碼 代碼如下:

int num = (int)value;
double num2 = value - num;
if ((num2 > 0.5) || ((num2 == 0.5) && ((num & 1) != 0)))
{
num++;
}
return num;

分析可以發(fā)現(xiàn),先是顯示把value去掉小數(shù)轉換成num,然后獲取value和num之間的小數(shù)差,再根據(jù)銀行家法則來舍去。
((num2 == 0.5) && ((num & 1) != 0))
如果舍去位等于0.5,而且通過位運算得到是否是奇數(shù),如果2個條件都符合,那么就+1。否則返回num。

相關文章

  • C#導出Excel的方法

    C#導出Excel的方法

    本文給大家分享的是基于.net 1.0開發(fā)的程序如何實現(xiàn)導出Excel的方法和示例,使用的是UltraWebGrid自帶導出Excel的控件,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • 一文詳解C#?Chart控件

    一文詳解C#?Chart控件

    這篇文章主要介紹了一文學習C#?Chart控件,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • C#使用委托實現(xiàn)的快速排序算法實例

    C#使用委托實現(xiàn)的快速排序算法實例

    這篇文章主要介紹了C#使用委托實現(xiàn)的快速排序算法,實例分析了C#委托機制與快速排序算法的實現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • C#向無窗口的進程發(fā)送消息

    C#向無窗口的進程發(fā)送消息

    這篇文章主要介紹了C#向無窗口的進程發(fā)送消息 的相關資料,需要的朋友可以參考下
    2016-05-05
  • 解析C#拼接Json串的幾種方法

    解析C#拼接Json串的幾種方法

    本文主要介紹了C#拼接Json串的幾種方法,主要包括了4種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C#中TransactionScope的使用小結

    C#中TransactionScope的使用小結

    本篇文章主要是對C#中TransactionScope的使用方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C# Color.FromArgb()及系統(tǒng)顏色對照表一覽

    C# Color.FromArgb()及系統(tǒng)顏色對照表一覽

    這篇文章主要介紹了C# Color.FromArgb()及系統(tǒng)顏色對照表一覽,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • asp.net core 使用 tensorflowjs實現(xiàn) face recognition的源代碼

    asp.net core 使用 tensorflowjs實現(xiàn) face recognition的源代碼

    tensorflowjs,在該項目中使用了ml5js這個封裝過的機器學習JavaScript類庫, 使用起來更簡單,本文給大家分享asp.net core 使用 tensorflowjs實現(xiàn) face recognition的源代碼,需要的朋友參考下吧
    2021-06-06
  • c#執(zhí)行外部命令示例分享

    c#執(zhí)行外部命令示例分享

    c#執(zhí)行外部命令示例分享,大家參考使用吧
    2013-12-12
  • C#圓形頭像框制作并從數(shù)據(jù)庫讀取

    C#圓形頭像框制作并從數(shù)據(jù)庫讀取

    本文主要介紹了C#圓形頭像框制作并從數(shù)據(jù)庫讀取,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論