Dal documentation sul metodo Math.Round(decimal)
:
Se il componente frazionaria di d è a metà strada tra due numeri interi, uno dei quali è anche e l'altro dispari, viene restituito il numero pari.
La stessa logica si applica al sovraccarico Math.Round(decimal, int)
. Avviso:
Math.Round(0.125, 2) // 0.12
Math.Round(0.135, 2) // 0.14
Math.Round(0.145, 2) // 0.14
Non è "cattiva matematica"; è una strategia di arrotondamento comune conosciuta come "round-to-even". Da Wikipedia:
Questa variante del round-a-nearest metodo è anche chiamato arrotondamento imparziale, convergente arrotondamento, statistico di arrotondamento, olandese arrotondamento, gaussiana arrotondamento, dispari arrotondamento pari, arrotondamento dei banchi o arrotondamento arrotondato ed è ampiamente utilizzato nella contabilità.
Questa è la modalità di arrotondamento predefinita utilizzata nelle funzioni e operatori di calcolo IEEE 754.
Se si desidera un controllo più preciso su come si arrotonda, è possibile specificare un parametro
Math.Round(0.125, 2, MidpointRounding.AwayFromZero) // 0.13
fonte
2013-12-16 17:30:36
MidpointRounding
Cordiali saluti, questo è noto come "banchiere di arrotondamento". –È l'arrotondamento del banchiere. Usa il sovraccarico Round() che accetta un argomento MidpointRounding per cambiarlo. –
http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default – Will