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

程序中兩個(gè)Double類(lèi)型相加出現(xiàn)誤差的解決辦法

 更新時(shí)間:2013年04月26日 15:44:04   作者:  
本篇文章介紹了,程序中兩個(gè)Double類(lèi)型相加出現(xiàn)誤差的解決辦法。需要的朋友參考下

今天在自己做的系統(tǒng)中,發(fā)現(xiàn)了一個(gè)奇怪的現(xiàn)象:幾個(gè)Double類(lèi)型的數(shù)據(jù)相加,到最后得出的金額比正確數(shù)值總是少了幾毛錢(qián)。以為是程序里的計(jì)算方法有問(wèn)題,可是排查了很多地方,始終沒(méi)有找到問(wèn)題出在哪里。最后干脆把計(jì)算方法一句一句拆分,得到了最后最簡(jiǎn)單的一步,就是把兩個(gè)具體的數(shù)值相加,但是最后的結(jié)果居然還是錯(cuò)誤的。比如,現(xiàn)在已經(jīng)到了最簡(jiǎn)單的一步:

復(fù)制代碼 代碼如下:

double n = 171.6;
double m = 28.17;
double k = n + m;

  按理說(shuō)k的值應(yīng)該是199.77,但其實(shí)得到的居然是199.76999999999998。

     我們的系統(tǒng)里有保留小數(shù)位數(shù)為4位,按理是可以四舍五入成199.77的。但是因?yàn)橛凶鼋痤~的合計(jì),是幾十甚至幾百個(gè)數(shù)據(jù)的相加,由于每?jī)蓚€(gè)數(shù)相加的時(shí)候都可能產(chǎn)生上述誤差,因此最后得到的結(jié)果已經(jīng)有了近0.7的誤差,就算再四舍五入也于事無(wú)補(bǔ)了。

     上網(wǎng)查了一下相關(guān)資料,覺(jué)得CSDN論壇里的這個(gè)帖子的解釋還是比較詳細(xì)的:http://bbs.csdn.net/topics/300023952,大意是說(shuō)由于運(yùn)算的時(shí)候進(jìn)行了進(jìn)制的轉(zhuǎn)換造成的(見(jiàn)8樓回復(fù)),所有的精度類(lèi)型在幾乎所有語(yǔ)言下都有這個(gè)問(wèn)題。比較有效的解決辦法是使用BigDecimal(見(jiàn)14樓回復(fù)),但是我個(gè)人認(rèn)為那個(gè)BigDecimal的解決辦法太麻煩了,至少對(duì)于我的系統(tǒng)來(lái)說(shuō)是這樣。還不如每加一次之后都進(jìn)行一次字符串轉(zhuǎn)換,保留有效的小數(shù)位數(shù),比如,上述語(yǔ)句可以改寫(xiě)成:

復(fù)制代碼 代碼如下:

double n = 171.6;
double m = 28.17;
//double k = n + m;
String kn = (n + m).ToString("N4");    //保留4位小數(shù)
double k = Convert.ToDouble(kn);

  也就是說(shuō),在String kn這一步,就已經(jīng)把誤差調(diào)整好了,得到的k值就是正確的了。這樣每次相加都處理一下誤差,無(wú)論要算多少個(gè)數(shù)據(jù)的合計(jì)也不用擔(dān)心會(huì)出現(xiàn)誤差過(guò)大的情況了。

    當(dāng)然最好是把這種處理方法做成一個(gè)公用方法,專(zhuān)門(mén)用來(lái)處理兩個(gè)數(shù)的相加。

相關(guān)文章

  • unity繪制一條流動(dòng)的弧線(xiàn)(貝塞爾線(xiàn))

    unity繪制一條流動(dòng)的弧線(xiàn)(貝塞爾線(xiàn))

    這篇文章主要為大家詳細(xì)介紹了unity繪制一條流動(dòng)弧線(xiàn)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn)

    C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn)

    這篇文章主要介紹了C#中DataTable的創(chuàng)建與遍歷實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C#優(yōu)化if...else代碼的方案總結(jié)

    C#優(yōu)化if...else代碼的方案總結(jié)

    在編寫(xiě)代碼實(shí)現(xiàn)業(yè)務(wù)需求過(guò)程中,會(huì)使用到大量的if...else 判斷語(yǔ)句,隨業(yè)務(wù)復(fù)雜程度不同,導(dǎo)致判斷語(yǔ)句出現(xiàn)多層嵌套、多分支等情況,導(dǎo)致代碼可讀性變差、增加維護(hù)難度,本文介紹了C# 如何優(yōu)化 if...else 讓代碼優(yōu)雅起來(lái),需要的朋友可以參考下
    2024-06-06
  • WPF如何實(shí)現(xiàn)日期范圍選擇器

    WPF如何實(shí)現(xiàn)日期范圍選擇器

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)日期范圍選擇器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C#中Equals和GetHashCode使用及區(qū)別

    C#中Equals和GetHashCode使用及區(qū)別

    這篇文章主要介紹了C#中Equals和GetHashCode使用及區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C#實(shí)現(xiàn)順序表(線(xiàn)性表)完整實(shí)例

    C#實(shí)現(xiàn)順序表(線(xiàn)性表)完整實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)順序表(線(xiàn)性表)的方法,結(jié)合完整實(shí)例形式分析了順序表的原理及C#相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-06-06
  • C# 判斷字符串為空的幾種辦法

    C# 判斷字符串為空的幾種辦法

    C# 判斷字符串為空的幾種辦法,需要的朋友可以參考一下
    2013-04-04
  • Winform消除button按下出現(xiàn)的虛線(xiàn)簡(jiǎn)單實(shí)現(xiàn)方法

    Winform消除button按下出現(xiàn)的虛線(xiàn)簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了Winform消除button按下出現(xiàn)的虛線(xiàn)簡(jiǎn)單實(shí)現(xiàn)方法,通過(guò)重寫(xiě)button設(shè)置Selectable參數(shù)實(shí)現(xiàn)該功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#實(shí)現(xiàn)在線(xiàn)點(diǎn)餐系統(tǒng)

    C#實(shí)現(xiàn)在線(xiàn)點(diǎn)餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)在線(xiàn)點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C#將html table 導(dǎo)出成excel實(shí)例

    C#將html table 導(dǎo)出成excel實(shí)例

    C#將html table 導(dǎo)出成excel實(shí)例,需要的朋友可以參考一下
    2013-04-04

最新評(píng)論

温州市| 宝兴县| 大同县| 玉溪市| 鲜城| 桐乡市| 辽源市| 青浦区| 津市市| 桃江县| 陈巴尔虎旗| 南京市| 贺兰县| 寻甸| 武汉市| 辉县市| 开封县| 高平市| 晋州市| 宕昌县| 白玉县| 古蔺县| 常宁市| 台北县| 米易县| 福鼎市| 乌兰察布市| 右玉县| 唐河县| 卢湾区| 阿合奇县| 瑞丽市| 界首市| 城市| 射阳县| 保亭| 枞阳县| 永吉县| 龙岩市| 墨竹工卡县| 斗六市|