第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么.NET使用銀行家的四舍五入作為缺省值?

為什么.NET使用銀行家的四舍五入作為缺省值?

阿晨1998 2019-06-28 10:41:01
為什么.NET使用銀行家的四舍五入作為缺省值?根據(jù)文檔,decimal.Round方法使用的是一種不為大多數(shù)應用程序所普遍的四舍五入的算法。因此,我總是編寫一個自定義函數(shù)來執(zhí)行更自然的加法算法:public static decimal RoundHalfUp(this decimal d, int decimals){     if (decimals < 0)     {         throw new ArgumentException("The decimals must be non-negative",              "decimals");     }     decimal multiplier = (decimal)Math.Pow(10, decimals);     decimal number = d * multiplier;     if (decimal.Truncate(number) < number)     {         number += 0.5m;     }     return decimal.Round(number) / multiplier;}有人知道這個框架設計決策背后的原因嗎?在框架中是否有任何將整半算法內(nèi)建的實現(xiàn)?或者是一些非托管的WindowsAPI?對于那些只會寫東西的初學者來說,這可能是誤導性的。decimal.Round(2.5m, 0)預期結(jié)果是3,但卻得到2。
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

可能是因為這是個更好的算法。在許多圓球的過程中,你的平均結(jié)果是所有的5.5的結(jié)果都是平平的向上和向下的四舍五入。這提供了更好的實際結(jié)果的估計,例如,添加一組四舍五入的數(shù)字。我想說的是,盡管這不是一些人所期望的那樣,但這可能是更正確的做法。


查看完整回答
反對 回復 2019-06-28
?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

另一個答案是為什么銀行家的算法(又名“銀行家算法”)第二輪對半平是個不錯的選擇,都是相當正確的。它沒有受到消極或積極的偏見的影響。離零半圓方法對最合理的分布。

但是問題是為什么.NET使用Banker的實際四舍五入作為缺省值-答案是Microsoft遵循了IEEE 754標準的。中也提到了這一點。用于Math.圓形的MSDN在評論下。

還請注意,.NET通過提供MidpointRounding枚舉他們當然可以提供更多的選擇解決紐帶問題,但他們選擇只滿足IEEE標準。


查看完整回答
反對 回復 2019-06-28
?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

雖然我不能回答“為什么微軟的設計師選擇這個作為默認的?”,但我只想指出一個額外的功能是不必要的。

Math.Round允許您指定MidpointRounding:

  • 當一個數(shù)字介于另外兩個數(shù)之間時,它被四舍五入到最近的偶數(shù)。
  • AwayFromZero-當一個數(shù)字介于另外兩個數(shù)之間時,它被四舍五入到遠離零的最近數(shù)。


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 374 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號