parayı yazıya çevirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
NeverFear
Üye
Mesajlar: 69
Kayıt: 20 Tem 2004 09:41
Konum: İzmir

Mesaj gönderen NeverFear »

Kod: Tümünü seç

unit RakmYazi;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask;

type
  Tfrm_RakamYazi = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
function Rakam_Yazi(Sayi_Rakam: Double): String;
var
  frm_RakamYazi: Tfrm_RakamYazi;
  a: String;
  ErrorCode: Integer;
implementation

{$T+}
{$R *.DFM}

function Rakam_Yazi(Sayi_Rakam: Double): String;
Label 1,2;
const
	b: array[0..9] of String = ('','Bir','İki','Üç','Dört','Beş','Altı',
    					'Yedi','Sekiz','Dokuz');
	y: array[0..9] of String = ('','On','Yirmi','Otuz','Kırk','Elli','Altmış',
    					'Yetmiş','Seksen','Doksan');
	m: array[0..5] of String = ('Katrilyon','Trilyon','Milyar','Milyon','Bin','');
var
	//a,e,s:String;
  e,s: String;
  Pozitif: Boolean;
  v: array[1..30] of Integer;
  c: array[1..3] of Integer;
  x: Integer;
begin
	a:= FloatToStr(Sayi_Rakam);
  if Sayi_Rakam >= 0 then
    	Pozitif:= True
  else Pozitif:= False;
  if not Pozitif then a:= Copy(a,2,Length(a)-1);
  for x:= 1 to Length(a) do
  begin
    	if (Ord(a[x]) > Ord('9')) or (Ord(a[x]) < Ord('0')) then goto 1;
  end;
  //if Length(a) > 21 then goto 1;
  if Length(a) > 18 then goto 1;
  //a:=StringOfChar('0',21-Length(a))+a;
  a:= StringOfChar('0',18 - Length(a)) + a;
  //for x:=1 to 21 do
  for x:= 1 to 18 do
  begin
    	v[x]:= StrToInt(a[x]);
  end;
  s:= '';
  //for x:=0 to 6 do
  for x:= 0 to 5 do
  begin
    	c[1]:= v[(x*3) + 1];
    	c[2]:= v[(x*3) + 2];
    	c[3]:= v[(x*3) + 3];
     {ShowMessage('c[1] = '+FloatToStr(c[1])+#10+'c[2] = '+
         FloatToStr(c[2])+#10+'c[3] = '+FloatToStr(c[3])+#10+'s = '+s+#10+
         'x = '+IntToStr(x));}
     if c[1] = 0 then
     	e:= ''
     else if c[1] = 1 then
     	e:= 'Yüz'
     else e:= b[c[1]] + 'Yüz';
     e:= e + y[c[2]] + b[c[3]];
     if e <> '' then e:= e + m[x];
     //if (x=5) and (e='BirBin') then e:='Bin';
     if (x = 4) and (e = 'BirBin') then e:= 'Bin';
     s:= s + e;
     {ShowMessage('b[c[1]] = '+b[c[1]]+#10+'y[c[2]] = '+y[c[2]]+#10+
         'b[c[3]] = '+b[c[3]]+#10+'m[x] = '+m[x]);}
  end;
  if s= '' then s:= 'Sıfır';
  if not Pozitif then s:= '- ' + s;
  Result:= s;
  goto 2;
1:Result:= 'Girilen Değer Hatalı ...!'; //Hatalı Çıktı
2://Hatasız Çıktı
end;

procedure Tfrm_RakamYazi.FormShow(Sender: TObject);
begin
	ErrorCode:= 0;
	Label1.Caption:= '';
end;

procedure Tfrm_RakamYazi.Edit1Exit(Sender: TObject);
begin
    if Edit1.Text <> '' then
       try
         Label1.Caption:= 'Yalnız, ' + Rakam_Yazi(StrToFloat(Edit1.Text)) +
         ' TL.''sıdır.';
       except on EConvertError do
         begin
           MessageDlg('Lütfen, sayısal bir değer giriniz...!', mtError,
           mbOKCancel, 0);
           Edit1.SetFocus;
           Edit1.Text:= '';
         end;
       end
    else Edit1.Text:= '0';
    //PostMessage(Edit1.Handle,WM_KEYDOWN,VK_END,0);
end;

procedure Tfrm_RakamYazi.Button1Click(Sender: TObject);
begin
	Close;
end;

procedure Tfrm_RakamYazi.Button2Click(Sender: TObject);
var
	I, Code: Integer;
begin
	Val(Edit2.Text, I, Code);
  ErrorCode:= Code;
  if code <> 0 then
  	MessageDlg('Hata Kodu = ' + IntToStr(Code) + ' ( ' +
     SysErrorMessage(ErrorCode) + ' )', mtWarning, [mbOk], 0)
  else Canvas.TextOut(10, 10, 'Value = ' + IntToStr(I));
end;

procedure Tfrm_RakamYazi.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if (Edit1.Text <> '') and (Key = #13) then Edit1Exit(Edit1);
end;

end.

Bu küçük uygulama Delphi 2.0 ile yazdım. Delphi 5.0'de uses hatası verdi
sen artık kendine göre ayarlarsın.
1 katrilyona kadar hatasız çalışıyor (999 trilyon999 milyar999milyon999bin999)
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

arkadaşlar artık biride yeniTL için bişey hazırlasın :) yakında aramaya başlarsınız kuruşları :)
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

ben bunu çok zaman önce clipper ile yapmıştım
delphiye uyarladım
999 katrilyona kadar yazabiliyor

ondalık kısmı dahil yazıya çevirir.
ben bunu para birimi olarak düşündüm.
tutar : real tipindedir..

kullanım..
sayi :=125,45;
rakyazf(sayi,0); // YÜZYİRMİBEŞ.TL / KIRKBEŞ.KR
rakyazf(sayi,1); // YÜZYİRMİBEŞ.TL
rakyazf(sayi,2); // KIRKBEŞ.KR

reis_selim@hotmail.com


/// ----------------------------------------------------- ///
function rakyazf(tutar:real; tur:integer):string;
const
b1:ARRAY [1..9] of string =
('BİR','İKİ','ÜÇ','DÖRT','BEŞ','ALTI','YEDİ','SEKİZ','DOKUZ');
b2:ARRAY [1..9] of string =
('ON','YİRMİ','OTUZ','KIRK','ELLİ','ALTMIŞ','YETMİŞ','SEKSEN','DOKSAN');
b3:ARRAY [1..6] of string =
('KATRİLYON','TRİLYON','MİLYAR','MİLYON','BİN','');
var
gr:ARRAY [1..6] of string[3];
sn:ARRAY [1..6] of string;
bs:ARRAY [1..3] of integer;
tutars, tutart, tutark , sonuct, sonuck: string;
i,l: integer;

begin
tutars:=floattostr(tutar);
if pos(',',tutars)=0 then tutars:=tutars+',00';
tutart:=copy(tutars,1,(pos(',',tutars)-1));
tutark:=copy(tutars,(pos(',',tutars)+1),2);
tutart:=stringofchar('0',(18-(length(trim(tutart))))) + tutart;
tutark:=tutark + stringofchar('0',( 2-(length(trim(tutark)))));
for i:=1 to 6 do gr:=copy(tutart,1+(3*(i-1)),3);

for l:=1 to 6 do
begin
bs[1]:=strtoint(copy(gr[l],1,1));
if bs[1]<>0 then(if bs[1]<>1 then sn[l]:=sn[l]+b1[bs[1]]+'YÜZ' else sn[l]:=sn[l]+'YÜZ');
bs[2]:=strtoint(copy(gr[l],2,1));
if bs[2]<>0 then sn[l]:=sn[l]+b2[bs[2]];
bs[3]:=strtoint(copy(gr[l],3,1));
if bs[3]<>0 then sn[l]:=sn[l]+b1[bs[3]];
if length(trim(sn[l]))<>0 then sn[l]:=sn[l]+b3[l];
end;

if sn[5]='BİRBİN' then sn[5]:='BİN';
for i:=1 to 6 do sonuct:=sonuct+sn;
if strtoint(copy(tutark,1,1))<> 0 then sonuck:=sonuck + b2[strtoint(copy(tutark,1,1))];
if strtoint(copy(tutark,2,1))<> 0 then sonuck:=sonuck + b1[strtoint(copy(tutark,2,1))];
if tur=0 then result:=sonuct + '.TL / ' + sonuck + '.KR ';
if tur=1 then result:=sonuct + '.TL ';
if tur=2 then result:=sonuck + '.KR ';
end;
/// ----------------------------------------------------- ///
Cevapla