Советы по Delphi

         

Число строкой II


Нашлись умельцы работать с русским языком! Ниже я приведу письмо, пришедшее мне вскоре после опубликования предыдущего совета.

Валентин!

Только сегодня скачал и с удовольствием читаю Ваши "Советы". Дойдя до просьбы прислать русский вариант "Сумма прописью", выдрал эту процедуру из своей (старой, на Паскале, но до сих пор эксплуатирующейся) программы.

Александр

    {------------------------ Деньги прописью ---------------------}
function TextSum(S: double): string;

function Conv999(M: longint; fm: integer): string;
const
c1to9m: array [1..9] of string [6] = ('один','два','три','четыре','пять','шесть','семь','восемь','девять');

c1to9f: array [1..9] of string [6] = ('одна','две','три','четыре','пять','шесть','семь','восемь','девять'); c11to19: array [1..9] of string [12] = ('одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать', 'шестнадцать','семнадцать','восемнадцать','девятнадцать'); c10to90: array [1..9] of string [11] = ('десять','двадцать','тридцать','сорок','пятьдесят','шестьдесят', 'семьдесят','восемьдесят','девяносто'); c100to900: array [1..9] of string [9] = ('сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот', 'восемьсот','девятьсот'); var
s: string; i: longint; begin
s := ''; i := M div 100; if i<>0 then s:=c100to900[i]+' '; M := M mod 100; i := M div 10; if (M>10) and (M<20) then s:=s+c11to19[M-10]+' ' else begin if i<>0 then s:=s+c10to90[i]+' '; M := M mod 10; if M<>0 then if fm=0 then s:=s+c1to9f[M]+' ' else s:=s+c1to9m[M]+' '; end; Conv999 := s; end;

{--------------------------------------------------------------}
var
i: longint; j: longint; r: real; t: string;
begin
t := '';
j := Trunc(S/1000000000.0); r := j; r := S - r*1000000000.0; i := Trunc(r); if j<>0 then begin t:=t+Conv999(j,1)+'миллиард'; j := j mod 100; if (j>10) and (j<20) then t:=t+'ов ' else case j mod 10 of 0: t:=t+'ов '; 1: t:=t+' '; 2..4: t:=t+'а '; 5..9: t:=t+'ов '; end; end;
j := i div 1000000; if j<>0 then begin t:=t+Conv999(j,1)+'миллион'; j := j mod 100; if (j>10) and (j<20) then t:=t+'ов ' else case j mod 10 of 0: t:=t+'ов '; 1: t:=t+' '; 2..4: t:=t+'а '; 5..9: t:=t+'ов '; end; end;
i := i mod 1000000; j := i div 1000; if j<>0 then begin t:=t+Conv999(j,0)+'тысяч'; j := j mod 100; if (j>10) and (j<20) then t:=t+' ' else case j mod 10 of 0: t:=t+' '; 1: t:=t+'а '; 2..4: t:=t+'и '; 5..9: t:=t+' '; end; end;
i := i mod 1000; j := i; if j<>0 then t:=t+Conv999(j,1); t := t+'руб. ';
i := Round(Frac(S)*100.0); t := t+Long2Str(i)+' коп.'; TextSum := t; end;

[000230]



Содержание раздела