Закръглянето на 5тицата при Math.Round
Здравейте, някой може ли да обясни защо Math.Round закръгля 4,5 като 4, докато 4,6 се закръгля като 5 и как да се справя с този проблем?
Благодаря!
Здравейте, някой може ли да обясни защо Math.Round закръгля 4,5 като 4, докато 4,6 се закръгля като 5 и как да се справя с този проблем?
Благодаря!
Ето какво намерих аз за банкерското закръгляне от един сайт за ексел.
Първо малко теория свързана със закръглянето. Както са ни учили в училище, ако цифрата след знака до който закръгляме е по-голяма или равна на петица я увеличаваме с единица. Т.е. 1.474 закръглено до втория знак е 1.47, а 1.476 е 1.48. В това правило има нещо "нечестно". Цифрите при които НЕ се закръгля са 1,2,3,4, а цифрите при които се закръгля са 5,6,7,8,9. Оказва се, че имаме повече случаи при които се закръгля! Търсят се различни начини за оправяне на тази грешка. Един от тези начини е така нареченото "банкерско закръгляне" (bankers' rounding). Това е едно от названията на метода: round half to even, unbiased rounding, convergent rounding, statistician's rounding, dutch rounding, gaussian rounding, odd-even rounding, broken rounding. Ето алгоритъма на закръгляне:
Т.е. да резюмирам разликата между това което сте учили в училището и "банкерското" училище е, ЧЕ АКО СЛЕД ЗНАКА ЗА ЗАКРЪГЛЯНЕ ИМАМЕ ПЕТИЦА (САМО ПЕТИЦА!) И ПОСЛЕДНИЯ ЗНАК Е ЧЕТНО ЧИСЛО НЕ СЕ ИЗВЪРШВА УВЕЛИЧАВАНЕ!
За повече информация четете тук: Rounding (статия във Wikipedia).