Nakon čitanja početničkih knjiga u C#, odlučio sam izaći iz komfort zone te izraditi kalkulator zateznih kamata u C#.
Well, I did it! No, samo za ostale odnose, i nisam u obzir uzeo tijek zastoja zateznih kamata (još sam u početničkoj fazi, premature optizimization is the root of all evil).
Prvo, demonstracija:
Heavy lifting je već odrađen u Pythonu te daje identične rezultate:
from pyval.racunovodstvo.zatezne import ZatezneKamate # private module
import datetime
= datetime.date(2015, 1, 1)
start = datetime.date(2017, 1, 1)
end
= ZatezneKamate(start, end, 1000.00, "B", True, True)
x x.get_total_interest()
183.34672505427056
No, kod iz C# je stvarno početnički i neću ga ovdje iznositi. Za reći je par stvari:
- Podaci o kamatnim stopama nalaze se u dva array objekta: jedan je tipa DateTime, drugi je tipa decimal.
- Posebni modul traži kojem periodu pripada datum od interesa. Nažalost, nisam mogao naći bisekciju/binarnu metodu pretrage array-a. Štoviše, niti u Python rješenju takvo nešto nisam našao, no elegantno rješenje postoji kroz korištenje dictionary podatkovne strukture (datum/kamata parovi podataka), spajanje istog s datumima od interesa, te DataFrame.ffill() metoda.
- Taj posebni modul vraća kamatnu stopu, koja služi u izračunu dnevne kamate, pa se suma kamate akumulira sve dok petlja ne dođe do krajnjeg datuma od interesa.
Osim što je potrebno kod u C# bolje organizirati, treba naći i bolju podatkovnu strukturu za ovakvu vrstu izračuna: umjesto dva array-a bolje bi bilo imati dictionary (možda?), no nisam još došao u C# do tog dijela. Isto tako, nije definiran scenarij u kojem korisnik traži izračun zateznih kamata kada je krajnji datum manji od početnog datuma.
Riješiti će se, sve u svoje vrijeme.
Onwards and upwards! :muscle: