Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Вниз

Сумма прописью   Найти похожие ветки 

 
Weare   (2002-10-07 17:32) [0]

Добрый вечер мастера.
Подскажите, если такая компонента или функция, которая может число написать прописью. Т.е. например вместо "45" выдать "сорок пять".
Спасибо.


 
Leonon   (2002-10-07 17:43) [1]

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;


 
Weare   (2002-10-07 18:19) [2]

Огромное спасибо



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-56196
AVD
2002-10-07 09:57
2002.10.17
PrintDialog


1-56088
NewI
2002-10-07 04:06
2002.10.17
Как из строки Str : String получить 1-ый, 2-ой и т.д символы


3-55942
koks
2002-09-24 11:21
2002.10.17
Синтаксическая ошибка в SQL.


14-56306
PVOzerski
2002-09-23 02:42
2002.10.17
А не заняться ли антирекламой?


14-56308
dimon79
2002-09-18 11:53
2002.10.17
компиляция проекта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский