最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2012年03月06日 23:46:39   作者:  
c#中的浮點(diǎn)型轉(zhuǎn)整形的舍取 四舍五入和銀行家舍入實(shí)現(xiàn)代碼,學(xué)習(xí)c#的朋友可以參考下
Double顯示轉(zhuǎn)換int
復(fù)制代碼 代碼如下:

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


這里可以看出浮點(diǎn)類型顯示轉(zhuǎn)換為整形是去除后面的小數(shù),只取整數(shù)部分。
MSDN上是這樣解釋的:使用顯式轉(zhuǎn)換在 C# 中執(zhí)行同一轉(zhuǎn)換時(shí),小數(shù)點(diǎn)右邊的值將丟失。
這里嘗試了double和float類型,結(jié)果和上面一樣!
難道四舍五入錯(cuò)了?Convert.ToInt32
復(fù)制代碼 代碼如下:

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

從上面的結(jié)果發(fā)現(xiàn),2.5,-18.5沒有遵守我們從小學(xué)習(xí)的四舍五入的法則!但是5.5卻正確的轉(zhuǎn)換成了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對(duì)這些方法的返回都特殊說明了:
舍入為最接近的 32 位有符號(hào)整數(shù)的 value。如果 value 為兩個(gè)整數(shù)中間的數(shù)字,則返回二者中的偶數(shù);即 4.5 轉(zhuǎn)換為 4,而 5.5 轉(zhuǎn)換為 6。
查閱相關(guān)資料,得出這個(gè)舍入的規(guī)則叫銀行家舍入法:
銀行家舍入是IEEE規(guī)定的小數(shù)舍入標(biāo)準(zhǔn)之一,也是IEEE目前規(guī)定中最優(yōu)秀的舍入方法,因此所有符合 IEEE 標(biāo)準(zhǔn)的語言都應(yīng)該實(shí)現(xiàn)這種算法,.NET平臺(tái)也不例外。

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

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

當(dāng)舍去位大于5的時(shí)候,那么舍去位不要,舍去位前面一位加1。

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

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

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

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

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ù)轉(zhuǎn)換成num,然后獲取value和num之間的小數(shù)差,再根據(jù)銀行家法則來舍去。
((num2 == 0.5) && ((num & 1) != 0))
如果舍去位等于0.5,而且通過位運(yùn)算得到是否是奇數(shù),如果2個(gè)條件都符合,那么就+1。否則返回num。

相關(guān)文章

  • c#?使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù)(四種)

    c#?使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù)(四種)

    本文主要介紹了c#?使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了C#中的IEnumerable簡(jiǎn)介及簡(jiǎn)單實(shí)現(xiàn)實(shí)例,本文講解了IEnumerable一些知識(shí)并給出了一個(gè)簡(jiǎn)單的實(shí)現(xiàn),需要的朋友可以參考下
    2015-03-03
  • C#創(chuàng)建快捷方式文件和硬鏈接文件的方法

    C#創(chuàng)建快捷方式文件和硬鏈接文件的方法

    平常我們最常window桌面上點(diǎn)擊的左下角帶小箭頭的文件就是快捷方式了,大家都很熟悉它,在Windows系統(tǒng)中,硬鏈接(Hard Link)是一種文件系統(tǒng)中的連接方式,本文給大家介紹了C#創(chuàng)建快捷方式文件和硬鏈接文件的方法,需要的朋友可以參考下
    2024-11-11
  • C#關(guān)鍵字之覆寫overwrite介紹

    C#關(guān)鍵字之覆寫overwrite介紹

    這篇文章介紹了C#關(guān)鍵字之覆寫overwrite,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# Aspose.Words 刪除word中的圖片操作

    C# Aspose.Words 刪除word中的圖片操作

    這篇文章主要介紹了C# Aspose.Words 刪除word中的圖片操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#微信公眾平臺(tái)開發(fā)之高級(jí)群發(fā)接口

    C#微信公眾平臺(tái)開發(fā)之高級(jí)群發(fā)接口

    這篇文章主要為大家詳細(xì)介紹了C#微信公眾平臺(tái)開發(fā)之高級(jí)群發(fā)接口的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C#讀取文件MD5值的實(shí)現(xiàn)代碼

    C#讀取文件MD5值的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#讀取文件MD5值的實(shí)現(xiàn)代碼,有了這個(gè)核心代碼,就可以實(shí)現(xiàn)校驗(yàn)文件MD5值的一些程序了,需要的朋友可以參考下
    2014-08-08
  • C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法

    C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法

    這篇文章主要介紹了C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法,以實(shí)例形式分析了創(chuàng)建access數(shù)據(jù)庫及在access數(shù)據(jù)庫中建表的完整過程,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • C#中dotnetcharting的用法實(shí)例詳解

    C#中dotnetcharting的用法實(shí)例詳解

    這篇文章主要介紹了C#中dotnetcharting的用法,以實(shí)例形式詳細(xì)分析了基于dotnetcharting的圖表繪制的各種常用方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C#中倒序輸出字符串的方法示例

    C#中倒序輸出字符串的方法示例

    這篇文章主要給大家介紹了C#中倒序輸出字符串的方法示例,本文中的字符串倒序指的是將“嗎? 好 近 最”輸出“最 近 好 嗎?”,文中給出了兩種方法,需要的朋友可以參考借鑒,下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01

最新評(píng)論

如东县| 潼南县| 邵东县| 北票市| 姜堰市| 嘉定区| 红原县| 林西县| 志丹县| 新蔡县| 宁夏| 达拉特旗| 图木舒克市| 牙克石市| 珠海市| 云林县| 稷山县| 响水县| 陆丰市| 夏津县| 枣庄市| 宜城市| 封开县| 宁乡县| 革吉县| 武鸣县| 阿克陶县| 张北县| 新民市| 宁夏| 甘洛县| 霞浦县| 达孜县| 蒙山县| 和平区| 彭泽县| 克拉玛依市| 陆良县| 华容县| 泾川县| 隆尧县|