Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизСумма прописью Найти похожие ветки
← →
Leonon (2002-04-03 09:47) [2]Вот готовая рабочая функция
{GetTextSum}
function GetTextSum(Sum : extended):string;
Type
TNameArr = array [0..4,0..2] of string;
Var
S : string;
I : integer; {счетчик по числу триад }
Sex : byte; {пол 0 - женский, 1 - мужской}
Const
{единицы}
One : array [0..1,0..9] of string = (("","одна ","дв_ ","три ","чотири ","п""ять ",
"ш_сть ","сiмь ","вiсiмь ","дев""ять "),("","один ","два ","три ","чотири ","п""ять ",
"ш_сть ","сiмь ","вiсiмь ","дев""ять "));
{от десяти до двадцати}
AfterTen : array [0..9] of string = ("десять ","одинадцять ","дванадцять ","тринадцять ",
"чотирнадцять ","п""ятнадцять ","ш_стнадцять ","с_мнадцять ","в_с_мнадцять ",
"дев""ятнадцать ");
{десятки}
Ten : array [0..9] of string = ("","десять ","двадцять ","тридцять ","сорок ",
"п""ятьдесят ","шiстьдесят ","сiмьдесят ","вiсiмьдесят ","дев""яносто ");
{сотни}
Handred : array [0..9] of string = ("","сто ","дв_ст_ ","триста ","чотириста ",
"п""ятьсот ","шiстьсот ","сiмьсот ","вiсiмьсот ","дев""ятьсот ");
{триады}
Name : TNameArr =
(("гривня","гривнi","гривень"),
("тисяча ","тисяч_ ","тисяч "),
("м_л_он ","м_л_она ","м_л_он_в "),
("м_л_ард ","м_л_арда ","м_л_ард_в "),
("трил_он ","трил_она ","трил_он_в "));
begin
S := FloatToStr(Sum*100);
{Выделяем дробную часть числа (копейки)}
Result := " "+Copy(S, Length(S)-1, 2)+" коп.";
{Выделяем целую часть числа (рубли)}
S := Copy(S,1,Length(S)-2);
{Добавляем нули спереди, чтобы длина стала кратна 3}
if ((Length(s) mod 3)<>0) or (Length(s)=0) then for I:=1 to 3-(Length(s) mod 3) do S:="0"+S;
{Формируем цикл по числу триад}
if (Length(S) div 3)<>0 then
for I := 0 to (Length(S) div 3)-1 do begin
{пол триады}
Sex :=1;
Case I of
0 : Sex:=0; {пол женский}
1 : Sex:=0; {тысяча}
2,3,4 : Sex:=1; {миллион, миллиард, триллион}
end;
{название триады}
if Not ((S[Length(S)-I*3-2]="0") and (S[Length(S)-I*3-1]="0") and
(S[Length(S)-I*3]="0") and (I<>0)) then
Case S[Length(S)-I*3-1] of
"0" : Case S[Length(S)-I*3] of
"0" : Result:=Name[I,2]+Result;
"1" : Result:=Name[I,0]+Result;
"2".."4" : Result:=Name[I,1]+Result;
"5".."9" : Result:=Name[I,2]+Result;
end;
"1" : Result:=Name[I,2]+Result;
"2".."9" : Case S[Length(S)-I*3] of
"0" : Result:=Name[I,2]+Result;
"1" : Result:=Name[I,0]+Result;
"2".."4" : Result:=Name[I,1]+Result;
"5".."9" : Result:=Name[I,2]+Result;
end;
end;
{текстовое значение триады}
Case S[Length(S)-I*3-1] of
"0" : if S="000" then Result:="Нуль "+Result
else Result:=One[Sex, StrToInt(S[Length(S)-I*3])]+Result;
"1" : Result:=AfterTen[StrToInt(S[Length(S)-I*3])]+Result;
"2".."9" : begin
Case S[Length(S)-I*3] of
"1".."9" : Result:=One[Sex, StrToInt(S[Length(S)-I*3])]+Result;
end;
Result:=Ten[StrToInt(S[Length(S)-I*3-1])]+Result;
end;
end;
Result:=Handred[StrToInt(S[Length(S)-I*3-2])]+Result;
end;
if Result<>"" then Result[1]:= string(AnsiUpperCase(Result[1]))[1];
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c