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.