Pa sem spet pri zaokroževanju 🙂 (zaokroževanje števil, zaokroževanje časovnih elementov), a slednje je res tako pomembno da se ga je potrebno večkrat zavedati.
In spet sem naletel na zanko. Že v prvem blogu o zaokroževanju sem opozoril, da se resen problem zaokroževanja pojavi samo takrat, ko se neko število nahaja natančno na sredini. Tedaj je vprašanje kam ga zaokrožiti – ali navzdol ali navzgor.
In v bančnem oz. finančnem sektorju v tem primeru zaokrožujejo – pazite sedaj (!) – na najbližje SODO število. Na prvi pogled se zdi to nesmiselno, celo čudno, a ima namen. Ideja je namreč v tem, da se statistično gledano, število včasih zaokroži navzgor (kadar je prvo sodo število večje), včasih pa navzdol (kadar je sodo število pač manjše).
In ravno to zagotavlja neko mero »poštenosti«, saj banka včasih zaokroži v svojo škodo, včasih pa v svojo korist in v splošnem se to izravna. Ravno zaradi tega se ta način zaokroževanja včasih imenuje tudi Gaussovo zaokroževanje.
Dobro, tu je vse ok in jasno, vprašanje pa je zakaj to omenjam. Odgovor pa je preprost in zanimiv. To omenjam zato, ker, čeravno je Excel prvenstveno namenjen uporabi v finančnih institucijah, ne zaokrožuje na opisan način :(.
No resnica je še bolj zmedena, saj Excel v tabelah zaokrožuje na en način, pri uporabi VBA procedure pa na drugega!!
Torej funkcija Round v Excelu v primeru števila, ki je točno na sredini le tega zaokroži navzgor, funkcija Round v VBA-ju pa število, ki je točno na sredini zaokroži na najbližje sodo število.
Razlika je preprosto vidna. Že si zapišete sledečo VBA funkcijo:
Function ZaokroziKotBanka(stevilo, pozicija) ZaokroziKotBanka = Round(stevilo, pozicija) End Function
In potem v Excelovi tabel zapišete:
=ROUND(10,5;0) -- rezultat 11 =ZaokroziKotBanka(10,5;0) -- rezultat 10
UPSI!
Dobro, res da je razlika zelo minorna in specifična, saj se pojavi samo in izključno tedaj, ko je neko število točno na sredini… a dobro je da se tega zavedate.
Kako torej Excel prepričati da zaokrožuje po »bančnih« standardih?
- Najlažje z uporabo zapisane VBA funkcije.
- Če VBA-ja ne morete/smete uporabiti pa je potrebno zapisati malce kompleksnejšo funkcijo zaokroževanja…
=IF(MOD(100*B2;1)=0,5;IF(ISODD(INT(100*B2));ROUNDUP(B2;2);ROUNDDOWN(B2;2));ROUND(B2;2))
Zanimivo kajneda ;)…