2016-08-09 12 views
-1

誰かが私の場合、以下のコードが両方の場合に1100を出力する理由を説明できますか?なぜMath.Round()は小数点以下1100以下のMidpointRoundingを変更する

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

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

その恐らくMath.round()を使用すると、0.5小数点恐らくMath.round(と1100年の下で、小数点以下に恐らくMath.round()を使用している場合は番号1100の後MidpointRounding戦略を変更するには)AwayFromZero MidpointRoundingを使用していますように見えますデフォルトではしかし、1100を超える小数点を使用すると、Math.Round()はデフォルトでToEven MidpointRoundを使用します。どうして?

私はMidpointRoundingを自分の問題を解決するように設定できます。私はなぜMath.Round()がこのように動作するのか不思議です。

+1

「1100」はどうやって見つかりましたか?デフォルトでは常に偶数に丸められます。 – Groo

答えて

2

なぜMath.Round()がこのように動作するのか不思議です。

それが動作するようにand documentedを設計されています方法ですので:

Dの端数部分は、2つの整数の一つでもあり、他の奇数の中間にある場合は、偶数であります戻ってきた。

動作は変わりませんが約1100のいずれか、Math.Round(1097.5m)Math.Round(1098.5m)の両方が、たとえば1098を返します。

+0

私は、偶数期の行動を誤解していることがわかります。明確化のためにありがとう。 – Poku

関連する問題