以下のコードスニペットでは、どちらの場合も13.70を期待していますが、最初に13.69、2番目に13.70を取得しています。
var d1 = Decimal.Round(13.694999999999999999999999998M, 2, MidpointRounding.AwayFromZero)
var d2 = Decimal.Round(13.695000M, 2, MidpointRounding.AwayFromZero);
var d1 = Decimal.Round(13.694999999999999999999999998M, 2, MidpointRounding.AwayFromZero);
13.694999999999は13.695未満であるため、13.69に丸められます。
この場合、MidpointRounding.AwayFromZeroは効果がありません。
var d2 = Decimal.Round(13.695000M, 2, MidpointRounding.AwayFromZero);
13.695は正確に13.69と13.70の間にあるため、丸めはMidpointRounding.AwayFromZeroに依存し、結果として13.70(0から離れている)になります。
丸めが有効桁数の少ない桁を丸めることを期待し、それらの値を使用して有効桁数の多い桁を丸めることは誤りです。例えば:
13.694999999999を13.695に丸めてから、13.695を13.70に丸めます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加