Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.16;
Скачать: CL | DM;

Вниз

перевод цифр в их словарные значения   Найти похожие ветки 

 
Алекси   (2003-09-26 18:31) [0]

помогите кто может: перешлите алгоритм перевода цифр в буквенные значения например : 423 = четыреста двадцать три
буду очень признателен


 
Rem ©   (2003-09-26 18:42) [1]

Не судите, люди добрые, писал недельку назад, ночью, на УПСе :D

type
TCaseForm = (cfOne, cfTwo, cfFive);
TSex = (sMale, sFemale);

function SpellRub(a_Money: currency): string;
var
S: string;
CF: TCaseForm;
T: string;
R: string;
C: string;

procedure TriadaToWords(a_sTriada: string; a_Sex: TSex; a_bSupressZero: boolean;
var a_sWords: string; var a_CaseForm: TCaseForm);
var
S: string;
begin
ASSERT(a_sTriada <> "");
a_CaseForm := cfFive;
if (Length(a_sTriada) = 1) then a_sTriada := "00" + a_sTriada;
if (Length(a_sTriada) = 2) then a_sTriada := "0" + a_sTriada;
if (a_sTriada = "000") then
begin
if a_bSupressZero then
a_sWords := ""
else
a_sWords := "ноль ";
Exit;
end;
case a_sTriada[2] of
"1": case a_sTriada[3] of
"0": S := "десять ";
"1": S := "одиннадцать ";
"2": S := "двенадцать ";
"3": S := "тринадцать ";
"4": S := "четырнадцать ";
"5": S := "пятнадцать ";
"6": S := "шестнадцать ";
"7": S := "семнадцать ";
"8": S := "восемнадцать ";
"9": S := "девятнадцать ";
end
else
begin
case a_sTriada[3] of
"1": begin S := IfThen(a_Sex = sMale, "один ", "одна "); a_CaseForm := cfOne; end;
"2": begin S := IfThen(a_Sex = sMale, "два ", "две "); a_CaseForm := cfTwo; end;
"3": begin S := "три "; a_CaseForm := cfTwo; end;
"4": begin S := "четыре "; a_CaseForm := cfTwo; end;
"5": S := "пять ";
"6": S := "шесть ";
"7": S := "семь ";
"8": S := "восемь ";
"9": S := "девять ";
end;
case a_sTriada[2] of
"2": S := "двадцать " + S;
"3": S := "тридцать " + S;
"4": S := "сорок " + S;
"5": S := "пятьдесят " + S;
"6": S := "шестьдесят " + S;
"7": S := "семьдесят " + S;
"8": S := "восемьдесят " + S;
"9": S := "девяносто " + S;
end;
end;
end;
case a_sTriada[1] of
"1": S := "сто " + S;
"2": S := "двести " + S;
"3": S := "триста " + S;
"4": S := "четыреста " + S;
"5": S := "пятьсот " + S;
"6": S := "шестьсот " + S;
"7": S := "семьсот " + S;
"8": S := "восемьсот " + S;
"9": S := "девятьсот " + S;
end;
a_sWords := S;
end;

begin
S := CurrToStr(Trunc(a_Money));
if (Length(S) mod 3 = 1) then S := "00" + S;
if (Length(S) mod 3 = 2) then S := "0" + S;
while (Length(S) > 0) do
begin
T := Copy(S, 1, 3);
case (Length(S) - 1) div 3 of
0:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "рубль";
cfTwo: R := R + "рубля";
cfFive: R := R + "рублей";
end
else
R := "рублей";
end;
1:
begin
TriadaToWords(T, sFemale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "тысяча ";
cfTwo: R := R + "тысячи ";
cfFive: R := R + "тысяч ";
end;
end;
2:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "миллион ";
cfTwo: R := R + "миллиона ";
cfFive: R := R + "миллионов ";
end;
end;
3:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "миллиард ";
cfTwo: R := R + "миллиарда ";
cfFive: R := R + "миллиардов ";
end;
end;
4:
begin
TriadaToWords(T, sMale, Result <> "", R, CF);
if (R <> "") then
case CF of
cfOne: R := R + "триллион ";
cfTwo: R := R + "триллиона ";
cfFive: R := R + "триллионов ";
end;
end;
end;
Delete(S, 1, 3);
Result := Result + R;
end;
Result := AnsiUpperCase(Result[1]) + Copy(Result, 2, Length(Result) - 1);
C := Format("%2.2d", [trunc(frac(a_Money) * 100)]);
Result := Result + " " + C + " коп.";
end;



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

Текущий архив: 2003.10.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
8-51346
Dima_Ber
2003-06-18 13:45
2003.10.16
Нужный кадр из mpeg файла??


6-51386
tytus
2003-08-19 10:56
2003.10.16
Сетевая плата


1-51199
hich
2003-10-04 15:26
2003.10.16
При переводе строки в дробное число часто возникает ошибка


14-51484
ORMADA
2003-09-30 15:18
2003.10.16
Окно на основе MS_WINHELP


1-51258
Olivka
2003-10-07 12:18
2003.10.16
фомы в MDI и их наследники