Cao,...
Ovih dana dokolicarim malo pa sam se bacio na humanitarni rad, evo i za tebe jedna procedurica...

mislim da sam je dobro odratio, ali testiraj je malo pre nego sto je upotrebis (zavrsio sam je u 2:00 ujutru, pa ces me valjda razumeti, ako nesto nije uredu
Znaci tvoju cifru konvertuj u string, pa prosledi funkciji (radi do 999999999999,99 - valjda firma nece nista u bilionima racunati

). U njoj samo podesi konstante kako tebi odgovaraju, ubaci YU slova ako ti trebaju i to je to. Eventualno je mozes prepraviti da kao parametar prima Float. I proveri da li sam sve nazive cifri dobro napisao.
Sada mi je palo na pamet,... moglo bi se jos doratiti da ne ispisuje "jedna hiljada" vec "hiljadu" i umesto "jedan milon", "milion", ali to su vec finese... ostavljam ih tebi...
Code:
Function TForm1.CurencyToStr (S : String) : String;
Const
Separator = ',';
StotiFormat = ' i %s/100';
Jedinice : Array [0..1, 1..19] Of String =
(('jedna', 'dve', 'tri', 'cetiri', 'pet',
'sest', 'sedam', 'osam', 'devet', 'deset',
'jedanaest', 'dvanaest', 'trinaest', 'cetrnajest', 'petnaest',
'sesnaest', 'sedamnaest', 'osamnaest', 'devetnaest'),
('jedan', 'dva', 'tri', 'cetiri', 'pet',
'sest', 'sedam', 'osam', 'devet', 'deset',
'jedanaest', 'dvanaest', 'trinaest', 'cetrnajest', 'petnaest',
'sesnaest', 'sedamnaest', 'osamnaest', 'devetnaest')
);
Desetice : Array [2..9] Of String =
('dvadeset', 'trideset', 'cetrdeset', 'pedeset',
'sezdeset', 'sedamdeset', 'osamdeset', 'devedeset');
Stotine : Array [0..9] Of String =
('', 'sto', 'dvesta', 'trista', 'cetirsto',
'petsto', 'sesto', 'sedamsto', 'osamsto', 'devetsto');
Prilozi : Array [1..4, 0..5] Of String =
((' dinar', '', 'a', 'a', 'a', 'a'),
('hiljad', 'a', 'e', 'e', 'e', 'a'),
('milion', '', 'a', 'a', 'a', 'a'),
('milijard', 'a', 'e', 'e', 'e', 'i')
);
Var
Stoti : String;
Trojka,
Temp : String;
X : Integer;
Begin
Stoti :='';
If Pos (Separator, S) > 0 Then
Begin
Stoti := Copy (S, Pos (Separator, S) + 1, Length (S));
S := Copy (S, 1, Pos (Separator, S) - 1);
// Ovde bi eventualno trebalo umesto secenja na dve decimale
// uraditi zaokruzivanje
If Length (Stoti) > 2 Then Stoti := Copy (Stoti, 1, 2);
End;
// Ne moze StrToInt jer je maxint 2147483647
If StrToFloat (S) = 0 Then
Result := 'nula'
Else
Begin
While Length (Stoti) < 2 Do Stoti := '0' + Stoti;
While Length (S) Mod 3 <> 0 Do S := '0' + S;
Result := '';
For X := 1 To 4 Do
Begin
Trojka := Copy (S, Length (S) - 2, 3);
Delete (S, Length (S) - 2, 3);
If Trojka = '' Then
Trojka := '000';
If Trojka <> '000' Then
Begin
If Trojka [2] In ['0', '1'] Then
Temp := Jedinice [X mod 2, StrToInt (Trojka [2] + Trojka [3])]
Else
Temp := Desetice [StrToInt (Trojka [2])] + Jedinice [X mod 2, StrToInt (Trojka [3])];
Temp := Stotine [StrToInt (Trojka [1])] + Temp;
If StrToInt (Trojka [2] + Trojka[3]) <= 5 Then
Temp := Temp + Prilozi [x, 0] + Prilozi [x, StrToInt (Trojka[2] + Trojka[3])]
Else
Temp := Temp + Prilozi [x, 0] + Prilozi [x, 5];
Result := Temp + Result;
End;
End;
End;
Result := Result + Format (StotiFormat, [Stoti]);
end;
Javi da li je to ono sto ti je trebalo.
Usput, odgovor za VladaB: Kada sam krenuo da je radim, mislio sam da ce biti par velikih Case-ova kao sto si spomenuo... ali evo bez ijednog