Zahteve: Pogosto se uporablja za zaokroževanje in ni zelo občutljiva na zahteve glede natančnosti.
Da bi dosegel zaokrožitev dveh decimalk, je razvijalec napisal naslednjo kodo,
Koda je zelo preprosta, razvijalciDejanski rezultat je bil 12,12, kar je nasprotovalo pričakovanemu zaokroževanju 12,13。
Razlog za ta rezultat je, da Math.Round privzeto ne uporablja pravila zaokroževanja, temveč zaokrožitev za sodo.
Zaokrožite na pet, da ustvarite par
Tako imenovano zaokroževanje s šest na pet, da nastane par, pomeni, da se po določitvi pomembnih števk, če je naslednja pomembna števka manjša ali enaka 4, zaokroži navzdol; če je večja ali enaka 6, zaokroži navzgor za ena. Ko je naslednja pomembna števka 5,
- Če je številka pred 5 liha, zaokrožite pet navzgor in napredujte za eno
- Če je 5 pred sodim številom, preskočimo 5 (0 je sodo).
Statistično je zaokroževanje na sodo natančneje kot zaokroževanje pet, saj lahko zaokroževanje vsakih pet na ena privede do večjega števila.
Na primer:
1,15+1,25+1,35+1,45 = 5,2
Če so pomembne števke eno decimalno mesto, se rezultat dobi z uporabo principa zaokroževanja
1,2 + 1,3 + 1,4 + 1,5 = 5,4
Rezultat, ki ga dobimo z zaokroževanjem na pet sodih, je
1,2 + 1,2 + 1,4 + 1,4 = 5,2
To kaže, da pravilo zaokroževanja daje natančnejše rezultate.
Math.Round
Kako torej uporabiti Math.Round, da dosežete pričakovano zaokroževanje?
Pravzaprav Math.Round v C# ponuja veliko metod preobremenitve, vključno z dvema:
Obe metodi nudita tretji parameter, imenovan mode, ki je enumeracijska spremenljivka MidpointRounding z dvema izbirnima vrednostima
- AwayFromZero - zaokrožitev navzgor
- To-Even - zaokroževanje v sodo zaokroževanje
Če želimo idealen zaokrožen rezultat, lahko uporabimo naslednjo kodo:
Enumeracija zaokroževanja sredine, kot je prikazano spodaj:
Referenčni:Prijava do hiperpovezave je vidna. |