為什么.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個贊

MMMHUHU
TA貢獻1834條經(jīng)驗 獲得超8個贊
Math.Round
MidpointRounding
:
當一個數(shù)字介于另外兩個數(shù)之間時,它被四舍五入到最近的偶數(shù)。 AwayFromZero-當一個數(shù)字介于另外兩個數(shù)之間時,它被四舍五入到遠離零的最近數(shù)。
- 3 回答
- 0 關注
- 374 瀏覽
添加回答
舉報
0/150
提交
取消