Po několika revizích se v blogu B. Stanik T. usadila zajímavá rekapitulace o zaokrouhlování Math.Round() v midpointu - tedy pětky.
Výchozí chování Math.Round() zaokrouhluje pětku na sudé číslo, tedy
double x = Math.Round(4.555, 2); // x == 4.56
// ale
double y = Math.Round(4.585, 2); // y == 4.58
...říká se tomu "rounding to nearest", "banker's rounding", nebo taky statistické zaokrouhlování - to proto, že se tím eliminuje statistická chyba způsobená zaokrouhlováním pětky stále stejným směrem (takhle se to prostřídá nahoru/dolu).
V .NET 2.0 přibyly metodě Math.Round() overloady, které berou jako třetí parametr enum MidpointRounding, kterým lze vynutit zaokrouhlování pětky nahoru potřebné pro účetní operace:
double x = Math.Round(4.555, 2, MidpointRounding.AwayFromZero); // x == 4.56
double y = Math.Round(4.585, 2, MidpointRounding.AwayFromZero); // y == 4.59...druhým členem
MidpointRounding je default hodnota
ToEven.