function SayiOku(Sayi:String; Bosluk:Boolean=False):String;
// Bu fonksiyon -fatihçopur- tarafından yazılmıştır (Made in Turkiye)
// girilen 36 basamaklı sayının okunuşunu döndürür
var
Basamak:Array[0..2] of Byte;
i,j:Byte;
BoslukStr,Birler,Yuzler,Boluk,UBSayi,UBSayiOkunusu:String;
Begin
if Bosluk then BoslukStr:=' ' else BoslukStr:='';
Birler := ' bir iki üç dört beş altı yedi sekizdokuz';
Sayi := Stringofchar('0',36 - Length(Sayi)) + Sayi;
for i := 0 to 11 do begin
UBSayi := copy(Sayi, 3 * i + 1, 3); UBSayiOkunusu := '';
if ((i <> 10) or (UBSayi <> '001')) and (UBSayi <> '000') then begin
for j := 0 to 2 do Basamak[j] := strtoint(copy(UBSayi, j + 1, 1));
Yuzler := '';
if Basamak[0] = 1 then
Yuzler := BoslukStr + 'yüz'
else if Basamak[0] > 1 then
Yuzler := Trimright(BoslukStr + copy(Birler, 5 * Basamak[0] + 1, 5)) + BoslukStr + 'yüz';
UBSayiOkunusu := Yuzler + Trimright(BoslukStr + copy(' on yirmi otuz kırk elli altmışyetmişseksendoksan', 6 * Basamak[1] + 1, 6)) + Trimright(BoslukStr + copy(Birler, 5 * Basamak[2] + 1, 5));
end;
if UBSayi = '000' then Boluk := '' else Boluk := TrimRight(BoslukStr + copy('desilyon nonilyon oktilyon septilyon sekstilyonkentilyon katrilyon trilyon milyar milyon bin ', 10 * i + 1, 10)); // sekstilyon yerine hekstilyon da kullanılabilir.
result := Trimleft(result + UBSayiOkunusu + Boluk);
end;
end;