2016-08-09 44 views
-1

有人可以向我解釋爲什麼在這兩種情況下,下面的代碼輸出1100?爲什麼Math.Round()在十進制後改變MidpointRounding 1100

decimal toEven = 1100.5m; 
decimal awayFromZero = 1099.5m; 

Console.WriteLine(Math.Round(toEven)); // output 1100 
Console.WriteLine(Math.Round(awayFromZero)); // output 1100 

它看起來像Math.Round()數1100前後發生了改變MidpointRounding策略如果您使用小數Math.Round()1100與下一個0.5小數Math.Round()使用AwayFromZero MidpointRounding默認。但是如果您使用1100以上的小數Math.Round()將默認使用ToEven MidpointRound。爲什麼?

我知道我可以設置MidpointRounding我自己來解決問題。我只是很好奇爲什麼Math.Round()是這樣工作的。

+1

你是怎麼找到'1100'的?它默認總是舍入偶數。 – Groo

回答

2

我只是好奇爲什麼Math.Round()這樣工作。

因爲這是它的設計and documented到的行爲方式:

如果d的小數部分是中途兩個整數,其中之一是,即使與其他奇之間,偶數數量是回。

行爲不會在1100左右改變,例如Math.Round(1097.5m)Math.Round(1098.5m)都會返回1098。

+0

我可以看到,我誤解了甚至任期的行爲。感謝澄清。 – Poku

相關問題