22 Mart 2016 Salı

Delphi için Parayı türkçe yazıya çevirmek için fonksiyon

Ne yalan söyleyeyim internette biraz aradım taradım sadece sayıya dönüştüren bir fonksiyon bulabildim. Bunu fatura gibi işlemlerde kullanabilmek için para olarak lira ve kuruş içerecek şekilde türkçe yazıya çevirmek istedim. Ekleme ve modifiye ile fonksiyon içi fonksiyon dolu bir fonksiyonumuz oldu.

Kullanımını yazmıyorum gayet açık :)





function ParayiTurkceYaz(amount: Currency):String;
const
  n=9;
  Basamak:array[0..n]of String=('','Bin','Milyon','Milyar','Trilyon',
                                   'Katrilyon','Kentrilyon','','','');
  Onlar:array[0..n]of String=('','On','Yirmi','Otuz','Kırk','Elli',
                                 'Altmış','Yetmiş','Seksen','Doksan');
  Birler:array[0..n]of String=('','Bir','İki','Üç','Dört','Beş','Altı',
                                  'Yedi','Sekiz','Dokuz');

var
  temp, lira, kurus:String;
  sl: TStringList;
  UcHane: Word;
  Yed, UcluHane: String;
  i, HangiBasamak: Byte;
  Negatif, BasamakYaz: Boolean;

  {Ön fonksiyonlar başlangıcı}
  function Modu(var Sayisi:Word):Byte;
  begin
   Result:= Sayisi mod 10;
   Sayisi:= Sayisi div 10;
  end;

  function SayiyiTurkceyeCevir(Sayi:Int64):String;
  begin
    if Sayi = 0 then
      Result:=''
    else
    begin
      Negatif:= Sayi<0;
      if Negatif then Sayi:= -Sayi;
      Result:= '';
      HangiBasamak:= 0;
      while Sayi>0 do begin
        UcHane:= Sayi mod 1000;
        Sayi:= Sayi div 1000;
        BasamakYaz:= UcHane>0;
        repeat
          UcluHane:= '';
          if ((HangiBasamak=1) and (UcHane=1)) then Break;//sadece bin yazılacaksa
          i:=Modu(UcHane);
          UcluHane:=Birler[i];//3 hanenin 1. si
          i:=Modu(UcHane);
          UcluHane:=Onlar[i]+UcluHane; //3 hanenin 2. si
          i:=Modu(UcHane);
          if i>0 then Yed:= 'Yüz' else Yed:= '';
          if i>1 then Yed:= Birler[i] + Yed;
          UcluHane:= Yed + UcluHane;//3 hanenin 3. sü
        until True;
        if BasamakYaz then Result:= UcluHane + Basamak[HangiBasamak] + Result;
        inc(HangiBasamak);
      end;
      if Negatif then Result:= 'Eksi' + Result;
    end;
  end;
begin
  {Ön fonksiyonlar sonu}
  temp:= CurrToStrF(amount, ffNumber, 2);
  temp:= temp.Replace(FormatSettings.ThousandSeparator, '');
  sl := TStringList.Create;
  sl.Delimiter := FormatSettings.DecimalSeparator;
  sl.DelimitedText := temp;
  lira:= SayiyiTurkceyeCevir(StrToInt64(sl[0]));
  kurus:= SayiyiTurkceyeCevir(StrToInt64(sl[1]));
  temp:='';
  if (Length(lira)>0) then temp:= lira + ' Türk Lirası ';
  if (length(kurus)>0) then temp:= temp + kurus + ' Kuruş';
  if (String.IsNullOrEmpty(temp)) then temp:='Sıfır';
  FreeAndNil(sl);
  result:= temp;
end;



Hiç yorum yok:

Yorum Gönder