Советы по 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]+' 'elsebeginif i<>0 then s:=s+c10to90[i]+' ';M := M mod 10;if M<>0 thenif 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 thenbegint:=t+Conv999(j,1)+'миллиард';j := j mod 100;if (j>10) and (j<20) then t:=t+'ов 'elsecase j mod 10 of0: t:=t+'ов ';1: t:=t+' ';2..4: t:=t+'а ';5..9: t:=t+'ов ';end;end;
j := i div 1000000;if j<>0 thenbegint:=t+Conv999(j,1)+'миллион';j := j mod 100;if (j>10) and (j<20) then t:=t+'ов 'elsecase j mod 10 of0: 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 thenbegint:=t+Conv999(j,0)+'тысяч';j := j mod 100;if (j>10) and (j<20) then t:=t+' 'elsecase j mod 10 of0: 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]



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